¿Hay alguna manera fácil de usar una imagen personalizada para una casilla de verificación? Estoy buscando duplicar el comportamiento "destacado" de gmail. Así que quiero tener una casilla de verificación 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?Imagen de casilla personalizada android
Respuesta
Copiar el btn_check. xml de android-sdk/platforms/android - #/data/res/drawable a la carpeta dibujable de su proyecto y cambie los estados de imagen "on" y "off" a sus imágenes personalizadas.
A continuación, el código XML sólo tendrá android:button="@drawable/btn_check"
<CheckBox
android:button="@drawable/btn_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true" />
Si desea utilizar iconos android diferente por defecto, puede utilizar android:button="@android:drawable/..."
Mal consejo. Los íconos se pueden cambiar de una versión a otra y pueden desaparecer. Si realmente te gusta el icono predeterminado, puedes tomarlo de las fuentes. –
¿Está diciendo que hacer referencia a los iconos predeterminados directamente a través de "@android: dibujable/..." es una mala idea, o este proceso por completo? – WOUNDEDStevenJones
Ejemplo: la referencia a los íconos holo bloqueará su aplicación en dispositivos pre-nido de abeja. Es realmente difícil mantener y solucionar esos problemas. Por lo tanto, normalmente copio no solo xml, sino también las imágenes para que sean calculadas en un 100%, segurándome de que se encontrarán los recursos. También esto es muy importante para garantizar que la interfaz de usuario se vea igual en todos los dispositivos. –
Si tiene código de fuente abierta Android, se puede encontrar la definición estilos en:
src/marcos/base/núcleo/res/res/valores
<style name="Widget.CompoundButton.CheckBox">
<item name="android:background">
@android:drawable/btn_check_label_background
</item>
<item name="android:button">
?android:attr/listChoiceIndicatorMultiple
</item>
</style>
Crear un selector de casilla dibujable:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/checkbox"
android:state_checked="false"/>
<item android:drawable="@drawable/checkboxselected"
android:state_checked="true"/>
<item android:drawable="@drawable/checkbox"/>
</selector>
Asegúrese de que la casilla de verificación es así android:button="@drawable/checkbox_selector"
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:button="@drawable/checkbox_selector"
android:text="CheckBox"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/Black" />
¿En qué registro especifica este selector? ¿Dentro del archivo XML en el que también especifica el CheckBox? –
Tom: cree su selector en la carpeta dibujable y la casilla de verificación en la carpeta de diseño –
Tuve que cambiar'botón 'por' fondo 'en la casilla de verificación –
Inténtelo -
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 esta attrib -
<declare-styleable name="CheckBoxImageView">
<attr name="default_img" format="integer"/>
<attr name="checked_img" format="integer"/>
<attr name="checked" format="boolean"/>
</declare-styleable>
uso como -
<com.adonta.ziva.consumer.wrapper.CheckBoxImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/checkBox"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:clickable="true"
android:padding="5dp"
app:checked_img="@drawable/check_box_checked"
app:default_img="@drawable/check_box" />
Se fijará todas sus porblems.
Faltan los métodos 'onSaveInstanceState()' y 'onRestoreInstanceState()', creo que el estado verificado perderse en la rotación – EpicPandaForce
Otra opción es utilizar un ToggleButton con fondo nulo y un botón personalizado.
Fuelle un ejemplo que también incluye un selector para el color del texto.
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/toggle_selector"
android:background="@null"
android:paddingLeft="10dp"
android:layout_centerHorizontal="true"
android:gravity="center"
android:textColor="@drawable/toggle_text"
android:textOn="My on state"
android:textOff="My off state" />
toggle_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:drawable="@drawable/state_on" />
<item
android:drawable="@drawable/state_off" />
</selector>
toggle_text.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:color="@color/app_color" />
<item
android:color="@android:color/darker_gray" />
</selector>
- 1. Cómo aplicar a la imagen personalizada casilla de verificación androide
- 2. Cambiar la imagen de verificación de casilla de verificación en la imagen personalizada
- 3. casilla de verificación personalizada en silverlight
- 4. Barra de calificación de Android personalizada que extiende la imagen
- 5. UISwitch con imagen personalizada
- 6. Imagen UIButton personalizada iOS
- 7. Imagen personalizada para MKAnnotation
- 8. Android Gallery Adapter con MultiTouch? ¿Galería personalizada o vista de imagen personalizada?
- 9. Android Casilla de verificación Grupo
- 10. Guardar imagen en biblioteca personalizada
- 11. iOS - imagen personalizada para UISlider
- 12. Android: botón con forma personalizada
- 13. Estilo de casilla de verificación de Android
- 14. Lista de Android y casilla de verificación
- 15. Android: valores de casilla de verificación marcados
- 16. Highcharts: Agregar un botón de imagen personalizada
- 17. Android vista personalizada Constructor
- 18. Fuente personalizada en Android
- 19. crear cuenta personalizada android
- 20. Android: AlertDialog personalizada
- 21. Animación personalizada en Android
- 22. Cámara personalizada Android
- 23. Android: imagen sobre imagen
- 24. Android: Disposición de Spinner personalizada
- 25. Vista de galería personalizada en android
- 26. Personalización de SeekBar: ¿cómo posicionar correctamente la imagen "pulgar" personalizada?
- 27. Android calidad de la cámara personalizada
- 28. jQuery - Casilla de verificación de estilo, reemplace con la imagen
- 29. Alternar imagen de casilla de verificación en UITableViewCell
- 30. Problema de orientación de la imagen de Android con actividad de cámara personalizada
Gracias, que en realidad encontramos exactamente lo que necesitaba aquí http: //it-ride.blogspot. com/2010/04/how-to-android-favorite-button-right.html pero hubiera tenido que hacerlo a tu manera si quisiera una imagen personalizada __real__ = P – Falmarri
Gracias.Exactamente lo que he estado buscando. He descubierto todo el estado, pero he estado configurando android: background en lugar de android: button y terminé con 2 botones. Ahora todo funciona bien. –
-1. La solución 'android: button' a continuación es mucho mejor que usar el atributo de fondo. –