2
votes

Après la migration vers AndroidX android: le bouton n'est pas respecté pour l'API sous Lollipop

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é:

  • changer CheckBox en AppCompatCheckbox (depuis AndroidX) - rien n'a changé
  • définir l'arrière-plan sur la case à cocher et définir 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 .

exemple d'arrière-plan défini sur img et bouton sur null p >

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: /


7 commentaires

En regardant rapidement la source, il semble que AppCompatCheckbox utilise plutôt l'attribut buttonCompat . Ce sera dans l'espace de noms de votre application, btw; c'est-à-dire xmlns: 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 si buttonCompat 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 de android: button a fonctionné! Je vous remercie! :RÉ


3 Réponses :


2
votes

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>


0 commentaires

0
votes

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"
                />


1 commentaires

La réponse de Shivam est celle qui a fonctionné pour nous, merci



0
votes

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" />


0 commentaires