selector de botones de android
Este es un selector de botones tal que cuando es normal aparece en rojo, cuando se presiona aparece en gris.
Me gustaría preguntar ¿cómo se podría modificar más directamente el código de manera que al PRESIONAR el tamaño y el color del texto también pudieran cambiar? ¡Muchas gracias!
<item android:state_pressed="true" >
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="2dp" android:color="@color/black" />
<solid android:color="@color/grey"/>
<padding android:left="5dp" android:top="2dp"
android:right="5dp" android:bottom="2dp" />
<corners android:radius="5dp" />
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="2dp" android:color="@color/black" />
<solid android:color="#FF6699"/>
<padding android:left="5dp" android:top="2dp"
android:right="5dp" android:bottom="2dp" />
<corners android:radius="5dp" />
</shape>
</item>
Solo necesita configurarlo selector
en button
su archivo de diseño.
<Button
android:id="@+id/button1"
android:background="@drawable/selector_xml_name"
android:layout_width="200dp"
android:layout_height="126dp"
android:text="Hello" />
y hecho.
Editar
El siguiente es button_effect.xml
el archivo en drawable
el directorio
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/numpad_button_bg_normal"></item>
</selector>
En esto, puedes ver que hay 3 elementos de diseño, solo necesitas colocar este button_effect
estilo en tu button
, como escribí anteriormente. Sólo necesitas reemplazar selector_xml_name
con button_effect
.
No se puede lograr un cambio en el tamaño del texto con un elemento dibujable de lista de estados . Para cambiar el color y el tamaño del texto, haga esto:
Color de texto
Para cambiar el color del texto, puede crear un recurso de lista de estado de color . Será un recurso separado ubicado en res/color/
el directorio. En el diseño xml debe establecerlo como valor para android:textColor
el atributo. El selector de color contendrá algo como esto:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/text_pressed" />
<item android:color="@color/text_normal" />
</selector>
Tamano del texto
No puedes cambiar el tamaño del texto simplemente con recursos. No hay un "selector de dimensiones". Tienes que hacerlo en código. Y no existe una solución sencilla.
Probablemente la solución más sencilla podría ser utilizar View.onTouchListener()
y manejar los eventos de subida y bajada en consecuencia. Utilice algo como esto:
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// change text size to the "pressed value"
return true;
case MotionEvent.ACTION_UP:
// change text size to the "normal value"
return true;
default:
return false;
}
}
});
Una solución diferente podría ser ampliar la vista y anular el setPressed(Boolean)
método. El método se llama internamente cuando ocurre el cambio del estado presionado. Luego cambie el tamaño del texto en consecuencia en la llamada al método (no olvide llamar al super).
Cree custom_selector.xml en la carpeta dibujable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/unselected" android:state_pressed="true" />
<item android:drawable="@drawable/selected" />
</selector>
Crear forma seleccionada.xml en una carpeta dibujable
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
<solid android:color="@color/selected"/>
<padding />
<stroke android:color="#000" android:width="1dp"/>
<corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>
Crear forma no seleccionada.xml en una carpeta dibujable
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
<solid android:color="@color/unselected"/>
<padding />
<stroke android:color="#000" android:width="1dp"/>
<corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>
Agregue los siguientes colores para el estado seleccionado/no seleccionado en color.xml de la carpeta de valores
<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>
Puedes consultar la solución completa desde aquí.