J'ai une case à cocher très simple:
<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" />
Pour coché / décoché, j'ai deux images différentes.
Après la migration vers AndroidX, je vois l'image par défaut pour Android sur les appareils ci-dessous API 21.
Ce que j'ai déjà essayé:
android: button = "@ null"
- l'arrière-plan est OK, mais je vois toujours l'image par défaut sur l'arrière-plan (voir l'image ci-dessous) Il semble qu'Android ne respecte pas complètement l'attribut button
.
Je n'ai plus d'idées. Pour Lollipop + everythink fonctionne comme il se doit. Quelqu'un at-il rencontré un problème comme celui-ci? Le seul changement que j'ai effectué a été la migration vers AndroidX: /
3 Réponses :
Dans le thème appcompat, le checkBoxStyle sous l'API 21 est défini comme
<item name="checkboxStyle">?android:attr/checkboxStyle</item>
l'attr buttonCompat a une valeur par défaut pour afficher l'animation de clic. Le bouton attr buttonCompat prend effet et ignore le bouton attr.
Pour le corriger, le bouton attr buttonCompat doit être indéfini. Dans votre thème, ajoutez
<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>
et ajoutez un style
<item name="checkboxStyle">@style/MyCheckBox</item>
Également dans votre répertoire values-v21, ajoutez ceci à votre thème
<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>
Vous devez définir le bouton et buttonCompat null pour les bibliothèques androidx. Cela ressemblera à ci-dessous -
<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" />
La réponse de Shivam est celle qui a fonctionné pour nous, merci
Remplacez CheckBox par AppCompatCheckBox (AndroidX) et remplacez android: button par 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" />
En regardant rapidement la source, il semble que
AppCompatCheckbox
utilise plutôt l'attributbuttonCompat
. Ce sera dans l'espace de noms de votre application, btw; c'est-à-direxmlns: app = "http://schemas.android.com/apk/res-auto"
,app: buttonCompat = "@ drawable / clipboard_checkbox"
.En fait, maintenant que je regarde à nouveau, il devrait revenir à l'attribut
button
normal sibuttonCompat
n'est pas là. Cela pourrait être un bogue, s'il est reproductible de manière fiable.^ Je vais vérifier dans environ 1h et je vous le ferai savoir! :)
Oh, attendez une seconde. Lollipop, dites-vous? Vos images sont-elles dessinables vectorielles, par hasard?
Nan. J'utilise uniquement des images (png).
Hmm, d'accord. J'essaierai de faire des tests plus tard, aussi, si j'en ai l'occasion.
La configuration de
app: buttonCompat
au lieu deandroid: button
a fonctionné! Je vous remercie! :RÉ