迁移到 AndroidX 后 android:button 不受 Lollipop 以下 API 的尊重
After migration to AndroidX android:button is not respected for API below Lollipop
我有一个非常简单的复选框:
<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" />
对于checked/unchecked,我有两张不同的图片。
迁移到 AndroidX 后,我在 API 21.
以下的设备上看到 Android 的默认图像
我已经尝试过的:
- 将 CheckBox 更改为 AppCompatCheckbox(从 AndroidX)- 没有任何变化
- 将背景设置为复选框并设置
android:button="@null"
- 背景没问题,但我仍然在背景上看到默认图像(见下图)
似乎 Android 完全不尊重 button
属性。
我没主意了。对于 Lollipop+,everythink 可以正常工作。有没有人遇到过这样的问题?
我所做的唯一改变是迁移到 AndroidX :/
在appcompat主题中,API21下面的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 有一个默认值来显示点击动画。 buttonCompat属性生效,忽略按钮属性。
要修复它,属性 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>
您需要为androidx 库设置button 和buttonCompat null。它看起来像下面-
<androidx.appcompat.widget.AppCompatCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@null"
app:buttonCompat="@null"
android:background="@drawable/cb_pause_resume_selector"
/>
将 CheckBox 更改为 AppCompatCheckBox(AndroidX) 并将 android:button 替换为 app:buttonCompat
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/clipboardBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/email_sign_in_button"
app:buttonCompat="@drawable/clipboard_checkbox" />
我有一个非常简单的复选框:
<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" />
对于checked/unchecked,我有两张不同的图片。
迁移到 AndroidX 后,我在 API 21.
以下的设备上看到 Android 的默认图像我已经尝试过的:
- 将 CheckBox 更改为 AppCompatCheckbox(从 AndroidX)- 没有任何变化
- 将背景设置为复选框并设置
android:button="@null"
- 背景没问题,但我仍然在背景上看到默认图像(见下图)
似乎 Android 完全不尊重 button
属性。
我没主意了。对于 Lollipop+,everythink 可以正常工作。有没有人遇到过这样的问题? 我所做的唯一改变是迁移到 AndroidX :/
在appcompat主题中,API21下面的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 有一个默认值来显示点击动画。 buttonCompat属性生效,忽略按钮属性。
要修复它,属性 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>
您需要为androidx 库设置button 和buttonCompat null。它看起来像下面-
<androidx.appcompat.widget.AppCompatCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@null"
app:buttonCompat="@null"
android:background="@drawable/cb_pause_resume_selector"
/>
将 CheckBox 更改为 AppCompatCheckBox(AndroidX) 并将 android:button 替换为 app:buttonCompat
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/clipboardBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/email_sign_in_button"
app:buttonCompat="@drawable/clipboard_checkbox" />