【问题标题】:Cannot get Material Design CheckBox to use styling无法让 Material Design CheckBox 使用样式
【发布时间】:2015-08-11 11:33:34
【问题描述】:

我正在尝试将两个 CheckBox 视图添加到我当前使用 AppCompat 库 (v7:22.2.1) 的当前应用程序的反馈片段中。此应用程序的 API 范围是 16-current (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 文章(例如 this one)中放入这种样式的样式项目的哪种组合,颜色在模拟器或设备上都不会改变,但它们会在预览中更新。我还尝试了对自定义主题的父主题的各种调整,但似乎没有任何关系。

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

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

【问题讨论】:

    标签: android checkbox material-design android-theme


    【解决方案1】:

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

    我的(错误的)假设是一个主题可以处理 AppCompat 和 Material Design,这是不正确的。基本上,对于 AppCompat ( 没有 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 父主题)中拥有另一个 Material Design 版本 (> API 21) 的样式,带有 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 设备上进行了尝试,一切看起来都符合我的预期。

    【讨论】:

      【解决方案2】:

      您需要为此指定中心颜色,在您的主要样式“AppTheme”中放置以下行

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

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

      【讨论】:

      • 我在原始帖子中链接到的 SO 文章中提到了该项目。它不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2016-09-09
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多