Imagen de checkbox personalizada Android

¿Hay alguna manera fácil de usar una imagen personalizada para una checkbox? Estoy buscando duplicar el comportamiento “destacado” de gmail. Así que quiero tener una checkbox que, cuando esté marcada, sea una estrella rellena. Y cuando no está marcada es una estrella vacía. ¿Tengo que usar una vista de imagen y hacer mi propia lógica?

Las casillas de verificación que son elementos secundarios de Button pueden darle a su casillero una imagen de fondo con varios estados como se describe aquí , en “Estilo de botón”:

… y ejemplificado aquí :

Crear un selector de checkbox dibujable:

       

Asegúrate de que tu checkbox sea como esta android:button="@drawable/checkbox_selector"

  

Copie el btn_check.xml de android-sdk / platforms / android – # / data / res / drawable en la carpeta dibujable de su proyecto y cambie los estados de imagen “on” y “off” a sus imágenes personalizadas.

Entonces tu xml solo necesitará android:button="@drawable/btn_check"

  

Si desea utilizar diferentes icons predeterminados de Android, puede usar android:button="@android:drawable/..."

Si tiene un código fuente abierto de Android, puede encontrar la definición de estilos en:
src / frameworks / base / core / res / res / values

  

Intentalo –

 package com; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; 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, AttributeSet attr, int defStyle) { super(context, attr, defStyle); init(attr, defStyle); } public CheckBoxImageView(Context context, AttributeSet 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(AttributeSet attributeSet, int defStyle) { TypedArray a = null; if (defStyle != -1) a = getContext().obtainStyledAttributes(attributeSet, R.styleable.CheckBoxImageView, defStyle, 0); else a = getContext().obtainStyledAttributes(attributeSet, 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); } } 

Añadir este attrib –

      

Use como –

   

Arreglará todos tus problemas.

Otra opción es usar un ToggleButton con fondo nulo y un botón personalizado.

A continuación, un ejemplo que incluye un selector para el color del texto.

  

toggle_selector.xml

      

toggle_text.xml

      

res / drawable / day_selector.xml

        

res / layout / my_layout.xml

  

Si está utilizando adaptadores personalizados que android: focusable = “false” y android: focusableInTouchMode = “false”, son nessesury para que los elementos de la lista se puedan hacer clic mientras usa la checkbox.

  

En drawable> checkbox_layout.xml ”