我正在使用内置资源ID android.R.layout.simple_spinner_dropdown_item创建一个SpinnerAdapter
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
Run Code Online (Sandbox Code Playgroud)
但资源ID创建的textView有textColor Black,我需要不同的颜色.改变颜色但保持其他一切的最佳方法是什么?
当我尝试在xml文件中创建自己的textView布局资源时,例如
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/White"
/>
Run Code Online (Sandbox Code Playgroud)
然后它的行为与android.R.layout.simple_spinner_dropdown_item的行为不同,因为例如填充不同.所以
这个问题涉及我今天提出的另一个问题(无法使用Android Action Bar下拉导航更改文本颜色).我已经意识到这个问题的一个答案(也就是这个问题)是创建我自己的ArrayAdapter继承的类,ArrayAdapter<T>这样我每次使用ArrayAdapter时都可以在代码中设置颜色(参见我对这个问题的回答).但这似乎是一个非常麻烦的解决方案: - |.
改变文字颜色应该不是一项艰巨的任务!
在我的代码中,我以编程方式向我的Layout添加了radioButtons,checkboxes等输入元素.问题是,这些元素的样式不是你可以获得的默认样式,当你通过xml添加let说一个radioButton时.(它在白色应用程序背景上看起来非常白,几乎透明.有点像它是透明的)另外,我添加的EditText元素具有相同的样式,如果你在其中键入内容,文本太大了重叠文本行.所以我猜这一切都归结为以某种方式给这些元素提供了默认样式,就像它们通过xml定义时一样.
我的代码示例如下所示:
RadioGroup radioGroup = new RadioGroup(mContext);
radioGroup.setLayoutParams(fullWidthWrapHeight);
for (int i = 0; i < arg0.getOptions().size(); i++){
RadioButton radioButton = new RadioButton(mContext, null);
radioButton.setPadding(padding16dp , padding8dp, padding16dp, padding8dp);
radioButton.setText(arg0.getOptions().get(i).getText());
radioButton.setLayoutParams(wrapBoth);
radioButton.setGravity(Gravity.CENTER_HORIZONTAL);
radioButton.setTextAppearance(mContext, R.style.Default_Text);
radioGroup.addView(radioButton);
}
Run Code Online (Sandbox Code Playgroud)
我的目标API lvl是21(Lollipop)
我一直在为我的Actionbar添加样式,并且每个方面都运行良好,直到我尝试更改Actionbar标题.当我为Actionbar的标题添加样式时,标题就会消失.Actionbar仍在那里,但根本没有标题.
这是我的Actionbar样式代码
<style name="Theme.TabTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/dark_primary</item>
<item name="colorAccent">@color/accent</item>
<item name="android:windowNoTitle">false</item>
<item name="android:windowActionBar">true</item>
<item name="android:actionBarStyle">@style/Theme.TabTheme.MyActionBar</item>
<item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>
</style>
<style name="Theme.TabTheme.MyActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="android:background">@color/primary</item>
<item name="android:height">50dp</item>
<item name="android:titleTextStyle">
@style/Theme.TabTheme.MyActionBar.TitleTextStyle
</item>
</style>
<style name="Theme.TabTheme.MyActionBar.TitleTextStyle"
parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/primary_text</item>
<item name="android:text">@string/app_name</item>
<item name="android:textSize">15sp</item>
</style>
<!-- ActionBar tabs styles -->
<style name="MyActionBarTabs" parent="Theme.AppCompat">
<!-- tab indicator -->
<item name="android:background">@drawable/actionbar_tab_indicator</item>
</style>
Run Code Online (Sandbox Code Playgroud)
为什么在Actionbar Title中添加样式会使标题消失?
我已将SearchView功能添加到工具栏中,我希望在展开时将其设置为全宽,并将提示文本颜色更改为白色而不是黑色.最后,我已经能够以编程方式执行此操作:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setMaxWidth(4000);
((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(getResources().getColor(R.color.md_text_white));
searchView.setIconifiedByDefault(false);
return true;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法通过xml或其他配置中的样式来实现这一点?我更喜欢独立的功能和样式.
我已尝试使用searchViewStyle并为SearchView创建自定义样式但尚未使用:
<style name="AppTheme" parent="Base.AppTheme">
<item name="searchViewStyle">@style/SearchViewTheme</item>
</style>
<style name="SearchViewTheme" parent="Widget.AppCompat.Light.SearchView">
<item name="android:maxWidth">10000dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这是我的menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_search"
android:title="@string/action_search"
android:orderInCategory="100"
android:icon="@drawable/ic_action_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个CardView代码.但是,它似乎没有正确应用样式.以下是款式:
<style name="CardViewStyle" parent="CardView">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">8dp</item>
</style>
<style name="Widget.CardContent" parent="android:Widget">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingLeft">16dp</item>
<item name="android:paddingRight">16dp</item>
<item name="android:paddingTop">24dp</item>
<item name="android:paddingBottom">24dp</item>
<item name="android:orientation">vertical</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在XML中,它看起来像这样:
<android.support.v7.widget.CardView
style="@style/CardViewStyle">
<LinearLayout
style="@style/Widget.CardContent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Caption"/>
</LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试在Java中完全相同:
CardView card = new CardView(new ContextThemeWrapper(MyActivity.this, R.style.CardViewStyle), null, 0);
LinearLayout cardInner = new LinearLayout(new ContextThemeWrapper(MyActivity.this, R.style.Widget_CardContent));
TextView tv_title = new TextView(this);
tv_title.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT
));
tv_title.setTextAppearance(this, R.style.TextAppearance_AppCompat_Title);
tv_title.setText("Name");
TextView tv_caption …Run Code Online (Sandbox Code Playgroud) 我正在处理Android L颜色定义以定义ListView的行.我有一个主题:
<item name="colorAccent">@color/color_blue_dark</item>
Run Code Online (Sandbox Code Playgroud)
在我的行中我定义了另一个:
<style name="DefaultRow">
<item name="colorAccent">@color/color_sand</item>
<item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>
Run Code Online (Sandbox Code Playgroud)
假设colorAccent值将被覆盖.但如果我在我的行中,那就不行了:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
...
style="@style/DefaultRow"/>
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,它会起作用:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
...
android:theme="@style/DefaultRow"/>
Run Code Online (Sandbox Code Playgroud)
有什么不同?是colorAccent在应用主题时定义的,而不是在以后重写?如何解决这个问题具有逆向兼容性?
我正在设计我的应用程序并想要设置按钮背景颜色并保持它们像材料一样.
设置按钮背景颜色
我为按钮创建样式,设置colorPrimary和设置按钮样式和colorButtonNormal.它有效.
style name="AppTheme.Button" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@android:color/white</item>
<item name="colorButtonNormal">@color/colorAccent</item>
</style>
...
<item name="android:buttonStyle">@style/AppTheme.Button</item>
<item name="colorButtonNormal">@color/colorAccent</item>
Run Code Online (Sandbox Code Playgroud)
但我想做一个不同颜色的按钮.我尝试使用backgroundTint,但它不起作用.所以我创造风格:
<style name="AppTheme.Button.Wildberries" parent="Widget.AppCompat.Button.Colored">
<item name="colorButtonNormal">@color/wildberries</item>
</style>
Run Code Online (Sandbox Code Playgroud)
它适用于Android 4.x,但在Android 5.x按钮仍然是colorAccent.
我为按钮创建了style-v21:
<style name="AppTheme.Button.Wildberries" parent="@android:style/Widget.Material.Button">
<item name="android:backgroundTint">@color/wildberries</item>
</style>
Run Code Online (Sandbox Code Playgroud)
适用于Android Studio:
适用于Android 4.x
但不适用于5.x.
我也尝试使用AppCompat.Button:
<android.support.v7.widget.AppCompatButton
xmlns:app="http://schemas.android.com/apk/res-auto"
app:backgroundTint="@color/wildberries"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="??????? ?? ????"
android:id="@+id/WildBtn"
android:textSize="14dp"
android:textColor="@android:color/white"
android:theme="@style/AppTheme.Button.Wildberries"
android:stateListAnimator="@null" />
Run Code Online (Sandbox Code Playgroud)
一无所获:
在Android 4.x设备按钮仍为紫色,5.x仍为绿色.
那么,在android 4.x和hihger上设置按钮背景颜色的方法是什么?
我正在开发自定义复选框和单选按钮,但样式不适用于前棒棒糖设备(显示黑色代替).我这样编码:
XML:
<com.kaho.myapp.CustomCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBoxText"
android:textColor="@color/colorPrimary"
android:theme="@style/SampleTheme"/>
Run Code Online (Sandbox Code Playgroud)
自定义复选框:
public class CustomCheckBox extends CheckBox {
public CustomCheckBox(Context context) {
super(context);
}
public CustomCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
setFont(context, attrs) ;
}
public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setFont(context,attrs) ;
}
public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
setFont(context, attrs) ;
}
private void setFont(Context context, AttributeSet attrs) {
if (attrs != null) {
/* Set the …Run Code Online (Sandbox Code Playgroud) 我正在构建一个使用DatePickerDialog的应用程序,允许用户选择他们的生日.这是现在加载对话框的代码:
private void selectBirthdate() {
int year, month, day;
if (mBirthDate == null) {
year = DEF_YEAR;
month = DEF_MON;
day = DEF_DAY;
}
else {
year = mBirthDate.get(Calendar.YEAR);
month = mBirthDate.get(Calendar.MONTH);
day = mBirthDate.get(Calendar.DAY_OF_MONTH);
}
new DatePickerDialog(
getActivity(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
mBirthDate = new GregorianCalendar();
mBirthDate.set(Calendar.YEAR, year);
mBirthDate.set(Calendar.MONTH, month);
mBirthDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
if (mTxtBirthDate != null) {
mTxtBirthDate.setText(mBirthDateFormat.format(mBirthDate.getTime()));
}
}
},
year,
month,
day
).show();
}
Run Code Online (Sandbox Code Playgroud)
但是,他们希望能够使用旧式微调器DatePicker,因为在新的日历视图中,用户并不总是可以更改年份.所以我一直在研究这个主题,根据我读过的内容,应该可以使用主题强制DatePickerDialog进入Spinner模式.所以这就是我所做的. …
android android-datepicker android-alertdialog android-styles
I have android application with custom themes which was developed 2-3 year ago.
I had this stylable in my attr.xml resouce file:
<declare-styleable name="EVETextViewPlus">
<attr name="customFont" format="string" />
<attr name="pageStripFont" format="string" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)
And I've used this inside my style_warm.xml resource file:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
<style name="style_display_page_title_warm">
<item name="my.app.package.:pageStripFont">fonts/b_titr.ttf</item>
<item name="android:textSize">25dp</item>
<item name="android:textColor">@color/colorDisplayPageTitle</item>
</style>
....
Run Code Online (Sandbox Code Playgroud)
When I'm going to sign my app, it checks for errors and prompts:
Cannot resolve symbol 'my.app.package:pageStripFont'
I should mention my.app.package is package …
android gradle android-theme android-styles android-attributes