Android appcompat-v7:21.0.0 更改Material复选框颜色

64

我已经更新了我的项目,使用了最新的appcompat支持库,新版本使用了Material Design复选框和单选按钮。我的应用程序是深色主题,复选框是黑色的,很难看到。我正在尝试根据Maintaining Compatibility更改它们的颜色,但目前还没有任何作用。

res/values/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">

复选框、编辑文本框、单选按钮等仍然是黑色的。

编辑

我不知道这是否有太大的区别,但我使用的单选按钮和复选框是用于CheckedTextView的,如下:

单选按钮:android:checkMark="?android:attr/listChoiceIndicatorSingle"

多选框:android:checkMark="?android:attr/listChoiceIndicatorMultiple"

由于它们得到了黑色材质的可绘制对象,我认为问题并不是来自它们。


你在其他的Values文件夹(例如values-v14)中改变了样式吗? - Arash GM
你要检查哪个版本的安卓系统?14级以下?还是14级以上? - Harsha Vardhan
@Arash 不,我已经删除了 values-v14 等内容,所以这个 styles.xml 是唯一的。 - Nima GT
@HarshaVardhan 上面,测试在4.4.2上。 - Nima GT
我认为这是appcompat-lib中的一个bug。我在版本22.1.0中遇到了同样的问题。更新到22.1.1后,小部件着色又可以正常工作了。 - Christopher
18个回答

1
如果您想更改特定复选框的背景颜色(而不是整个应用程序),可以尝试以下技巧:
在drawable文件夹中创建custom_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
    android:id="@+id/rebate_tnc_checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/custom_checkbox" />

1

您可以将另一个主题传递给警告对话框的构造函数

<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);

1
你所做的应该可以根据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>

抱歉,我忘了提到,我已经尝试过Theme.AppCompat了,但没有任何改变。 - Nima GT

0

我正在使用appcompat库v21:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/custom_color</item>
        <item name="colorAccent">@color/custom_color</item>    
</style>

以上的样式使我的复选框出现了 Material Design(已在 Android 5、4.3 和 4.1.1 上测试),但在 Android 2.3.3 上出现了旧的复选框样式。

0

添加

<item name="android:textColorSecondary">@color/secondary_text</item>

在style.xml和style.xml(v21)中


0

你的AppTheme的父级是@style/Theme.AppCompat.Light

将其更改为@style/Theme.AppCompat

现在你的控件将会在深色背景下呈现浅色。


0

0

将以下语法添加到复选框或单选按钮等小部件中以着色:

android:buttonTint="@color/silver"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接