¿Hay una manera fácil de usar una imagen personalizada para una casilla de verificación? Estoy buscando duplicar el comportamiento "destacado" de gmail. Entonces quiero tener una casilla de verificación que, cuando está marcada, es una estrella rellena. Y cuando no está marcado es una estrella vacía. ¿Tengo que usar una vista de imagen y hacer mi propia lógica?
182
android:button
solución a continuación es mucho mejor que usar el atributo de fondo!Cree un selector de casillas de dibujo:
Asegúrese de que su casilla de verificación sea así
android:button="@drawable/checkbox_selector"
fuente
Copie el archivo btn_check.xml de android-sdk / plataformas / 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 usar diferentes iconos de Android predeterminados, puede usar
android:button="@android:drawable/..."
fuente
res / drawable / day_selector.xml
res / layout / my_layout.xml
fuente
Si tiene código fuente abierto de Android, puede encontrar la definición de estilos en:
src / frameworks / base / core / res / res / values
fuente
Intentalo -
Agregue este atributo -
Usar como -
Arreglará todos tus problemas.
fuente
onSaveInstanceState()
yonRestoreInstanceState()
, creo que el estado verificado se perdería en la rotaciónOtra opción es usar un ToggleButton con fondo nulo y un botón personalizado.
A continuación se muestra un ejemplo que incluye un selector para el color del texto también.
toggle_selector.xml
toggle_text.xml
fuente
Si está utilizando adaptadores personalizados
android:focusable="false"
yandroid:focusableInTouchMode="false"
está seguro de hacer clic en los elementos de la lista mientras usa la casilla de verificación.En drawable> checkbox_layout.xml
fuente
Si usa androidx.appcompat: appcompat y desea un diseño personalizado (de tipo
selector
conandroid:state_checked
) para trabajar en versiones de plataforma antiguas además de nuevas versiones de plataforma, debe usaren vez de
fuente
Basado en las respuestas de Enselic y Rahul.
Funciona para mí (antes y después de API 21):
fuente