无法使Material Design复选框使用样式化

3
我正在尝试在我的应用中为反馈片段添加两个复选框视图,该应用使用的是AppCompat库(v7:22.2.1)。此应用程序的API范围为16-当前(22)。我的清单设置了以下主题定义:android:theme="@style/AppTheme",在我的styles.xml文件中如下定义:
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="AppTheme.FacebookFlatButton">
        <item name="android:background">@drawable/facebook_flat_button</item>
        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
        <item name="android:textColor">@android:color/white</item>
    </style>

    <style name="AppTheme.TwitterFlatButton">
        <item name="android:background">@drawable/twitter_flat_button</item>
        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
        <item name="android:textColor">@android:color/white</item>
    </style>

</resources>

问题是我的CheckBox(以及我注意到的EditText)视图没有默认的正确颜色,以便在选中时可以查看。下面是Android Studio和模拟器并排的预览截图:Android Studio and Emulator无论我从其他SO文章中放入这个样式的什么样式组合,比如这一个,颜色都不会在模拟器或设备上改变,但它们在预览中更新。我还尝试了将父主题调整为我的自定义主题的各种微调,但似乎都没有任何作用。我已经在Nexus 5(API 19)和Nexus 6(API 22)模拟器上尝试过这个,它在我的Nexus 6设备上也是一样的情况。我在这里没有定义太多自定义内容,但我仍然觉得我在这里缺少一些小而关键的信息。我漏掉了什么?
2个回答

3

好的,经过大量的研究和测试,我有了一个可以同时适用于我的CheckBox和EditText控件的解决方案。

我(错误地)假设一个主题可以同时处理AppCompat和Material Design,这是不正确的。基本上,在AppCompat(< API 21)中,你必须使用没有android:前缀的名称来定义样式,例如对于CheckBox和EditText而言:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Base application theme -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
    </style> 

    <style name="AppTheme.EditText" parent="Widget.AppCompat.EditText">
        <item name="colorControlNormal">@color/almanac_red_dark</item>
        <item name="colorControlActivated">@color/almanac_red_light</item>
        <item name="colorControlHighlight">@color/almanac_red_light</item>
    </style>

    <style name="AppTheme.CheckBox">
        <item name="colorAccent">@color/almanac_red_dark</item>
    </style>

    <style name="AppTheme.FlatButton">
        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
        <item name="android:textColor">@android:color/white</item>
    </style>

    <style name="AppTheme.FacebookFlatButton" parent="AppTheme.FlatButton">
        <item name="android:background">@drawable/facebook_flat_button</item>
    </style>

    <style name="AppTheme.TwitterFlatButton" parent="AppTheme.FlatButton">
        <item name="android:background">@drawable/twitter_flat_button</item>
    </style>

</resources>

但是你必须在values-v21目录下拥有另一版本适用于Material Design 版本(> API 21)的样式(使用Material Design父主题)并且需要使用android:前缀:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="@android:style/Theme.Material.Light">
        <!-- Customize your theme here. -->
    </style>

    <style name="AppTheme.EditText">
        <item name="android:colorControlNormal">@color/almanac_red_dark</item>
        <item name="android:colorControlActivated">@color/almanac_red_light</item>
        <item name="android:colorControlHighlight">@color/almanac_red_light</item>
    </style>

    <style name="AppTheme.CheckBox">
        <item name="android:colorAccent">@color/almanac_red_dark</item>
    </style>

</resources>

我已经在 Nexus 4(API 16)、Nexus 5(API 19)和 Nexus 6(API 22)模拟器以及我的实体 Nexus 6 设备上进行了尝试,一切看起来都符合我的预期。

1

您需要为此指定强调颜色,在主样式中添加以下行 'AppTheme'

  <item name="colorAccent">@color/color_primary</item>

这将改变您的复选框和编辑文本的颜色。

那个项目在我原始帖子中链接的SO文章中提到过,但它并不起作用。 - TheIcemanCometh

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