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等仍然是黑色的。

编辑

我不知道这是否有很大的不同,但我使用的CheckedTextViewbutton和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_5
Android 4.2.2
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)