我有一个非常简单的复选框:
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/clipboardBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/clipboard_checkbox" />
对于选中/未选中的情况,我有两个不同的图像。
迁移到 AndroidX 后,我在低于 API 21 的设备上看到 Android 的默认图像。
我已经尝试过:
- 将 CheckBox 更改为 AppCompatCheckbox(来自 AndroidX) - 没有任何变化
- 将背景设置为复选框并设置
android:button="@null"
- 背景没问题,但我仍然在背景上看到默认图像(见下图)
Android 似乎完全不尊重 button
属性。
我没有主意了。对于 Lollipop+ 来说,一切都按其应有的方式运作。有人遇到过这样的问题吗? 我所做的唯一改变是迁移到 AndroidX :/
最佳答案
在appcompat主题中,API 21下面的checkBoxStyle定义为
<style name="Base.Widget.AppCompat.CompoundButton.CheckBox" parent="android:Widget.CompoundButton.CheckBox">
<item name="android:button">?android:attr/listChoiceIndicatorMultiple</item>
<item name="buttonCompat">?attr/listChoiceIndicatorMultipleAnimated</item>
<item name="android:background">?attr/controlBackground</item>
</style>
attr buttonCompat 有一个默认值来显示点击动画。 attr buttonCompat 生效并忽略按钮 attr。
要修复此问题,必须未定义 attr buttonCompat。在您的主题中添加
<item name="checkboxStyle">@style/MyCheckBox</item>
并添加样式
<style name="MyCheckBox" parent="android:Widget.CompoundButton.CheckBox">
<item name="android:button">?android:attr/listChoiceIndicatorMultiple</item>
<item name="buttonCompat">@null</item>
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
</style>
还在您的values-v21目录中,将其添加到您的主题
<item name="checkboxStyle">?android:attr/checkboxStyle</item>
关于android - 迁移到 AndroidX android :button is not respected for API below Lollipop 后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55631014/