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中的预览和我的模拟器并排的屏幕截图:
无论我从其他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