其他分享
首页 > 其他分享> > android-无法获取Material Design CheckBox来使用样式

android-无法获取Material Design CheckBox来使用样式

作者:互联网

我试图将两个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中的预览和我的模拟器并排的屏幕截图:

Android Studio and Emulator

无论我从其他SO文章(例如this one)中以这种样式添加样式项的任何组合,颜色在模拟器或设备上都不会更改,但它们会在“预览”中进行更新.我还尝试了对自定义主题进行父主题的各种调整,但是似乎没什么关系.

我已经在Nexus 5(API 19)和Nexus 6(API 22)仿真器中进行了尝试,并且它在Nexus 6设备上也做同样的事情.

我在这里没有定义太多自定义,但是我仍然觉得我在这里缺少一些关键的小信息.我想念什么?

解决方法:

好吧,经过大量的研究和测试,我有了适用于我的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父主题)中具有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设备上进行了尝试,一切看起来都与我期望的一样.

标签:material-design,android-theme,android,checkbox
来源: https://codeday.me/bug/20191119/2039652.html