Case à cocher personnalisée image Android

Existe-t-il un moyen simple d’utiliser une image personnalisée pour une case à cocher? Je cherche à reproduire le comportement “starré” de gmail. Donc, je veux avoir une case à cocher qui, une fois cochée, est une écanvas remplie. Et si décochée est une écanvas vide. Dois-je utiliser une image et faire ma propre logique moi-même?

Les cases à cocher étant des enfants de Button, vous pouvez simplement donner à votre case à cocher une image d’arrière-plan avec plusieurs états, comme décrit ici , sous “Style de bouton”:

… et illustré ici :

Créez un sélecteur de case à cocher pouvant être dessiné:

       

Assurez-vous que votre case à cocher est comme ceci android:button="@drawable/checkbox_selector"

  

Copiez le fichier btn_check.xml de android-sdk / plates-formes / android – # / data / res / drawable dans le dossier pouvant être dessiné de votre projet et remplacez les états d’image «on» et «off» par vos images personnalisées.

Alors votre xml aura juste besoin d’ android:button="@drawable/btn_check"

  

Si vous souhaitez utiliser différentes icons Android par défaut, vous pouvez utiliser android:button="@android:drawable/..."

Si vous avez un code source ouvert pour Android, vous pouvez trouver la définition des styles sous:
src / frameworks / base / core / res / res / valeurs

  

Essayez-le –

 package com; import android.content.Context; import android.content.res.TypedArray; import android.util.AtsortingbuteSet; import android.view.View; import android.widget.ImageView; public class CheckBoxImageView extends ImageView implements View.OnClickListener { boolean checked; int defImageRes; int checkedImageRes; OnCheckedChangeListener onCheckedChangeListener; public CheckBoxImageView(Context context, AtsortingbuteSet attr, int defStyle) { super(context, attr, defStyle); init(attr, defStyle); } public CheckBoxImageView(Context context, AtsortingbuteSet attr) { super(context, attr); init(attr, -1); } public CheckBoxImageView(Context context) { super(context); } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; setImageResource(checked ? checkedImageRes : defImageRes); } private void init(AtsortingbuteSet atsortingbuteSet, int defStyle) { TypedArray a = null; if (defStyle != -1) a = getContext().obtainStyledAtsortingbutes(atsortingbuteSet, R.styleable.CheckBoxImageView, defStyle, 0); else a = getContext().obtainStyledAtsortingbutes(atsortingbuteSet, R.styleable.CheckBoxImageView); defImageRes = a.getResourceId(0, 0); checkedImageRes = a.getResourceId(1, 0); checked = a.getBoolean(2, false); a.recycle(); setImageResource(checked ? checkedImageRes : defImageRes); setOnClickListener(this); } @Override public void onClick(View v) { checked = !checked; setImageResource(checked ? checkedImageRes : defImageRes); onCheckedChangeListener.onCheckedChanged(this, checked); } public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { this.onCheckedChangeListener = onCheckedChangeListener; } public static interface OnCheckedChangeListener { void onCheckedChanged(View buttonView, boolean isChecked); } } 

Ajouter cet atsortingbut –

      

Utiliser comme –

   

Il va réparer tous vos problèmes.

Une autre option consiste à utiliser un ToggleButton avec un arrière-plan nul et un bouton personnalisé.

Ci-dessous, un exemple qui inclut également un sélecteur pour la couleur du texte.

  

toggle_selector.xml

      

toggle_text.xml

      

res / drawable / day_selector.xml

        

res / layout / my_layout.xml

  

Si vous utilisez des adaptateurs personnalisés autres que android: focusable = “false” et android: focusableInTouchMode = “false” sont des nessesury pour rendre les éléments de la liste cliquables tout en utilisant la case à cocher.

  

Dans drawable> checkbox_layout.xml ”