我正在尝试将两个 CheckBox View 添加到我当前应用程序中的反馈 fragment ,该应用程序正在使用 AppCompat 库 (v7:22.2.1)。此应用程序的 API 范围是 16-current (22)。我的 list 设置了以下主题定义:
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) View 没有默认为正确的颜色,以便在选中时可以看到它们。这是 Android Studio 中的预览版和我的模拟器并排显示的屏幕截图:
无论我将其他 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 设备,一切看起来都符合我的预期。
关于android - 无法让 Material Design CheckBox 使用样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31940637/