Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Lollipop: botón desactivado -> ¿qué estilo?

Traté de localizar, cómo Lollipop muestra un botón, que está desactivado con android:enabled="false" en el archivo de diseño.

Holo

Con Holo , es fácil: En styles_holo.xml, encuentro el estilo Widget.Holo.Button, que me da una referencia a @ drawable / btn_default_holo_dark. Allí encuentro el selector:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/btn_default_normal_holo_dark" /> <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/btn_default_disabled_holo_dark" /> <item android:state_pressed="true" android:drawable="@drawable/btn_default_pressed_holo_dark" /> <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/btn_default_focused_holo_dark" /> <item android:state_enabled="true" android:drawable="@drawable/btn_default_normal_holo_dark" /> <item android:state_focused="true" android:drawable="@drawable/btn_default_disabled_focused_holo_dark" /> <item android:drawable="@drawable/btn_default_disabled_holo_dark" /> </selector> 

Chupete

Cuando trato de aplicar la misma lógica a Lollipop, me quedé atascado:

En styles_material.xml encuentro el estilo <style name="Widget.Material.Button"> donde encuentro la referencia a <item name="background">@drawable/btn_default_material</item> . Pero no hay selector ?? !! En su lugar encuentro:

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?attr/colorControlHighlight"> <item android:drawable="@drawable/btn_default_mtrl_shape" /> </ripple> 

¿Podría alguien explicar por favor, qué estilo específico Lollipop utiliza para un botón desactivado. ¡Muchas gracias!

Editar

Me puedo responder parcialmente: En @drawable/btn_default_mtrl_shape encuentro una referencia a <solid android:color="?attr/colorButtonNormal" /> , que a su vez apunta a @color/btn_default_material_light , que incluye un selector:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:alpha="@dimen/disabled_alpha_material_light" android:color="@color/button_material_light"/> <item android:color="@color/button_material_light"/> </selector> 

Pero ese valor alfa sólo explica la mitad. De alguna manera Lollipop también establecer la elevación a 0?

  • Diseño del material: los márgenes izquierdos para el título y el contenido de la barra de acción no coinciden
  • ¿Cómo hacer el diálogo de diseño de material de pantalla completa?
  • ¿Cómo cambiar el color del texto y la flecha en la barra de herramientas?
  • Cómo utilizar android: Theme.Material (tema material) en styles.xml android?
  • Cómo hacer que TextInputLayout asigne rojo asterisco para los campos obligatorios
  • Expanda CardView dentro de RecyclerView como nueva actividad como Inbox de Google Android
  • Dos botones de acción flotante al lado del otro
  • Barra de herramientas de Android + Diseño de pestaña + Cajón, Ocultar barra de herramientas al desplazarse y llevar TabLayout a la parte superior
  • One Solution collect form web for “Lollipop: botón desactivado -> ¿qué estilo?”

    Así resolví esto, gracias a su respuesta parcial.

    Primero: agregue la nueva carpeta "color" en la carpeta "res", si no existe. Introduzca aquí la descripción de la imagen

    Agregue un nuevo archivo .xml en la carpeta "color" (llamaré a este archivo ButtonColorSelector.xml) donde crearemos ColorStateList como este:

     <?xml version="1.0" encoding="UTF-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:color="#F2F2F2"/> <!-- disabled --> <item android:state_pressed="true" android:color="#FF0000"/> <!-- pressed --> <item android:state_focused="true" android:color="#FF0000"/> <!-- focused --> <item android:color="#0000FF"/> <!-- default --> </selector> 

    Segundo: Agregue el archivo .xml de efecto ripple que mencionó, en la carpeta "drawable" y haga referencia a su colorSelector en lugar de btn_default_mtrl_shape. Llamaré a este archivo RaisedButton.xml.

     <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?attr/colorControlHighlight"> <item> <shape> <solid android:color="@color/buttoncolorselector"/> <corners android:radius="5dp" /> </shape> </item> </ripple> 

    Tercero: Ahora puedes usar tu drawable para fondo de botón en tus layouts, como esto:

     <Button android:background="@drawable/raisedbutton" android:text="@string/SomeButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="DoStuffitto" android:enabled="false" android:id="@+id/someButton" /> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.