Android appcompat-v7:21.0.0更改材质checkbox的颜色
我更新了我的项目,使用最新的appcompat支持库,新版本使用材料devisecheckbox和单选button。 我的应用程序是黑暗的主题,checkbox是黑色的,很难看到。 我试图改变他们的颜色根据维护兼容性,但迄今没有任何工作。
RES /值/ styles.xml
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light"> <!-- customize the color palette --> <item name="colorAccent">@color/silver</item> </style>
在build.gradle:
android { compileSdkVersion 21 buildToolsVersion '21.1.1' defaultConfig { minSdkVersion 9 targetSdkVersion 19 } } ..... ..... compile 'com.android.support:appcompat-v7:21.0.0'
AndroidManifest.xml中:
<application android:name="ee.mtakso.App" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme">
checkbox,editTexts,单选button等仍然是黑色的。
编辑
我不知道这是否有很大的不同,但我使用的CheckedTextView
button和checkbox是一个CheckedTextView
,如下所示:
单选(单选button): android:checkMark="?android:attr/listChoiceIndicatorSingle"
多(checkbox): android:checkMark="?android:attr/listChoiceIndicatorMultiple"
由于这些黑色材料是可绘制的,我认为这个问题不是来自他们。
我有一个类似的问题与未经检查的CheckBoxes和RadioButtons 。 我find了解决办法,当我发现控件采取“关”的颜色
<item name="android:textColorSecondary">@color/secondary_text</item>
编辑:
指定,如果你的应用或活动的主题inheritance了L的AppCompat(Dark / Light / Light.DarkActionBar)之一,你可以设置:
<style name="SampleTheme" parent="Theme.AppCompat"> <item name="colorAccent">@color/green</item> <item name="android:textColorSecondary">@color/red</item> </style>
结果是:
注意:当你得到不同的效果,你可能使用“错误的”主题 – 确保你设置正确。
我相信这是AppCompat主题中的一个错误。 我的解决方法是将两行代码添加到xml布局文件中的每个CheckBox。
android:button="@drawable/abc_btn_check_material" android:buttonTint="@color/colorAccent"
你从来不想直接引用abc_ drawables,但在这种情况下,我没有find其他解决scheme。
这也适用于RadioButton小部件! 您只需使用abc_btn_radio_material而不是abc_btn_check_material
我和你有同样的问题。 我再次查看AppCompat v21 – 前棒棒糖设备的材料devise!
而且我发现这个“所有活动都必须从ActionBarActivity扩展, ActionBarActivity从v4支持库的FragmentActivity扩展,所以你可以继续使用片段。 。
所以我改变了我的活动到ActionBarActivity,它解决了我的问题。 我希望它也能解决你的问题。
我一直在寻找解决scheme,我发现它。
步骤1
扩展ActionBarActivity
public static class MyActivity extends ActionBarActivity { //... }
第2步
在你的风格文件中写入两个值
<style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> <item name="colorAccent">#009688</item> <item name="android:textColorSecondary">#757575</item> </style>
colorAccent – 检查颜色
android:textColorSecondary – 未选中的颜色
第3步
在AndroidManifest.xml中设置你的主题
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.radiobutton" android:versionCode="1" android:versionName="1.0"> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> .... <activity android:name=".activity.MyActivity " android:theme="@style/MyTheme"/> ..... </application> </manifest>
结果
Android 5
Android 4.2.2
我这样做至less改变了checkbox的边框:
<style name="checkBoxComponent" parent="AppTheme"> //Checked color <item name="colorAccent">@color/blueBackground</item> //Checkbox border color <item name="android:textColorSecondary">@color/grayBorder</item> </style>
在我的布局
<android.support.v7.widget.AppCompatCheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:theme="@style/checkBoxComponent" android:text="Yay" />
仍然搞清楚如何获得checkbox的背景。 希望它有帮助。
1.在styles.xml文件中声明自定义样式。
<style name="CustomStyledRadioButton" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">@color/red</item> <item name="colorControlActivated">@color/red_pressed</item> </style>
2.通过android:theme属性将此样式应用于您的RadioButton。
<RadioButton android:id="@+id/rb_option1" android:layout_width="match_parent" android:layout_height="wrap_content" android:checked="true" android:gravity="left" android:lineSpacingExtra="10dp" android:padding="10dp" android:text="Option1" android:textColor="@color/black" android:theme="@style/CustomStyledRadioButton"/>
要指定颜色,请覆盖:
为检查颜色:
<item name="android:colorControlActivated">@color/your_color</item>
为unckecked颜色:
<item name="android:colorControlNormal">@color/your_color</item>
兼容性库和checkbox以及单选button都会导致很多问题。
1)他们只有黑色的任何Android 4.x设备。 他们在Android 5.x和2.x中可以正常使用(不要问为什么它在2.x上工作,没有任何线索)。
2)他们没有禁用状态(如果你所有的checkbox都启用了,那么无关紧要,否则你对于一个非常不好的惊喜是有好处的)。
请注意,默认的黑暗主题背景是灰色的,而不是黑色,所以如果你保持默认,它是“好”。
为了解决这个问题,我创build了以下可绘制的白色和残疾版本,全部添加到我的核心项目中,但不是在compat项目中(为了明显的维护目的):
abc_btn_check_to_on_mtrl_000 abc_btn_check_to_on_mtrl_015 abc_btn_radio_to_on_mtrl_000 abc_btn_radio_to_on_mtrl_015
然后创build一个可绘制来pipe理所有状态(覆盖compat原始状态):
例如,黑暗的主题将使用这个:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015" /> <item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000" /> <item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" /> </selector>
轻的主题将使用此(用户可以在我的应用程序中切换主题):
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_light" /> <item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_light" /> <item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" /> </selector>
然后,我所要做的就是覆盖默认的compat主题(包括活动和对话框,对于明暗主题),添加如下内容:
<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item> <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>
而这对于轻的主题:
<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material_light</item> <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material_light</item>
现在我已经在每个Android版本上都有完整的操作checkbox和收音机了! 国际海事组织的compat图书馆根本没有testing黑暗的主题,只有白色的主题被使用。 禁用状态很可能永远不会被compat lib的开发者使用。
100%工作
只需为您的RadioButton创build一个样式,然后更改colorAccent,如下所示:
<style name="RadioButtonTeal" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorAccent">@color/md_teal_600</item> </style>
然后只需将此样式添加到您的AppCompatRadioButton:
<android.support.v7.widget.AppCompatRadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:theme="@style/RadioButtonTeal" />
只需像这样扩展ActionBarActivity :
Public class MainActivity extends ActionBarActivity { //... }
根据Android博客文章,你所做的工作应该是:
colorAccent :对主要品牌颜色的明亮补充。 默认情况下,这是应用于框架控件的颜色(通过colorControlActivated)。
colorControlActivated :应用于框架控件的激活状态(例如已选中状态)的颜色。
也许问题来自你的主题有@ style / Theme.AppCompat.Light作为父母,请尝试只用Theme.AppCompat:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <!-- customize the color palette --> <item name="colorAccent">@color/silver</item> </style>
如果你想改变一个特定的checkbox背景颜色(不是整个应用程序),你可以试试这个技巧:
在可绘制文件夹中为背景创buildcustom_checkbox.xml文件:
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="14dp" android:color="@android:color/transparent" /> <solid android:color="#ffffff" /> //the intended color of the background <corners android:radius="2dp" /> </shape>
然后将其设置为checkbox的背景:
<CheckBox android:id="@+id/rebate_tnc_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/custom_checkbox" />
您可以将另一个主题传递给警报对话框的构造
<style name="RadioButton" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorControlNormal">@color/red</item> <item name="colorControlActivated">@color/green</item> </style>
并在构造函数中使用该样式
new AlertDialog.Builder(getContext(), R.style.RadioButton);
你的AppTheme的父母是@style/Theme.AppCompat.Light
。
将其更改为@style/Theme.AppCompat
。
现在,您的控件将在黑暗背景下亮起。
我使用的是appcompat库v21:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/custom_color</item> <item name="colorAccent">@color/custom_color</item> </style>
以上的风格使我的checkbox出现与材料devise(在Android 5,4.3,4.1.1testing),但在Android 2.3.3出现与旧的checkbox样式。
如果您尝试手工创buildComboBox(新的ComboBox()…),那么无论您设置了什么,它们总是会变黑。 很明显compat库已经坏了,我为此创build了一个bug报告: https : //code.google.com/p/android/issues/detail?id = 158020
添加此语法颜色像checkbox或单选button的小部件android:buttonTint =“@ color / silver”
加
<item name="android:textColorSecondary">@color/secondary_text</item>
在style.xml和style.xml(v21)