无法让 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 设备和一切都如我所料。
我正在尝试将两个 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 设备和一切都如我所料。