selector de botones de android

Resuelto pearmak asked hace 54 años • 6 respuestas

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>

pearmak avatar Jan 01 '70 08:01 pearmak
Aceptado

Solo necesita configurarlo selectoren buttonsu 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.xmlel archivo en drawableel 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_effectestilo en tu button, como escribí anteriormente. Sólo necesitas reemplazar selector_xml_namecon button_effect.

Chintan Rathod avatar Dec 24 '2012 17:12 Chintan Rathod

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:textColorel 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).

Tomik avatar Dec 24 '2012 17:12 Tomik

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í.

nirav kalola avatar Oct 14 '2015 05:10 nirav kalola