无法让 Material 设计复选框以使用样式

Cannot get Material Design CheckBox to use styling

我正在尝试将两个 CheckBox 视图添加到我当前使用 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 中预览版和我的模拟器并排显示的屏幕截图:

无论我将其他 SO 文章(例如 [=15=)中的样式项组合到此样式中,颜色在模拟器或设备上都不会改变,但它们会在预览中更新.我还尝试对父主题进行各种调整以适应我的自定义主题,但似乎没有什么关系。

我已经在 Nexus 5 (API 19) 和 Nexus 6 (API 22) 模拟器上试过了,它在我的 Nexus 6 设备上也做了同样的事情。

我在这里并没有定义太多的习惯,但我仍然觉得我在这里遗漏了一些重要的小信息。我错过了什么?

您需要为其指定强调色,在您的主要样式中放在下面一行 'AppTheme'

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

这将更改您的复选框并编辑文本颜色

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

我的(错误)假设是一个主题可以处理 AppCompat 和 Material 设计,这是不正确的。基本上,对于 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 设计版本 (> API 21) 提供另一个样式版本(使用 Material 设计父主题), with 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 设备和一切都如我所料。