После перехода на AndroidX android: кнопка не учитывается для API ниже 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" />
Для проверенных / непроверенных у меня есть два разных изображения.
После перехода на AndroidX изображение по умолчанию для Android на устройствах ниже API 21.
Что я уже пробовал:
- изменить CheckBox на AppCompatCheckbox (из AndroidX) - ничего не изменилось
- установить фон на флажок и установить
android:button="@null"
- фон в порядке, но я все еще вижу изображение по умолчанию на фоне (см. изображение ниже)
Кажется, что Android полностью неуважение button
приписывать.
У меня нет идей. Для Lollipop + все работает как надо. Кто-нибудь сталкивался с такой проблемой? Единственное изменение, которое я сделал, это переход на AndroidX:/
0 ответов
В теме appcompat checkBoxStyle ниже API 21 определяется как
<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 вступает в силу и игнорирует атрибут кнопки.
Чтобы исправить это, атрибут 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>
Измените 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" />
Для библиотек 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"
/>