¿Cómo aclarar un botón?

Tengo un botón definido como se muestra a continuación. Cuando quiero deshabilitarlo, utilizo my_btn.setEnabled(false) , pero también me gustaría ponerlo en gris. ¿Cómo puedo hacer eso?

Gracias

 <Button android:id="@+id/buy_btn" style="@style/srp_button" /> 

Style / srp_button

 <style name="srp_button" parent="@android:style/Widget.Button"> <item name="android:background">@drawable/btn_default</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#ffffff</item> <item name="android:textSize">14sp</item> <item name="android:typeface">serif</item> <item name="android:paddingLeft">30dp</item> <item name="android:paddingRight">30dp</item> <item name="android:paddingTop">5dp</item> <item name="android:paddingBottom">5dp</item> </style> 

Drawable / btn_default.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/pink" /> <corners android:radius="6dp" /> </shape> 

Tienes que proporcionar 3 ó 4 estados en tu btn_defaut.xml como selector.

  1. Estado presionado
  2. Estado predeterminado
  3. Estado de enfoque
  4. Estado activado (estado deshabilitado con indicación falsa, ver comentarios)

Usted proporcionará el efecto y el fondo para los estados en consecuencia.

Aquí está una discusión detallada: Botón estándar de Android con un color diferente

También podría hacer que aparezca como desactivado, estableciendo el alpha (haciéndolo semi-transparente). Esto es especialmente provechoso si su fondo del botón es una imagen, y usted no desea crear estados para él.

 button.setAlpha(.5f); button.setClickable(false); 

La solución más fácil es establecer el filtro de color a la imagen de fondo de un botón como he visto aquí

Puede hacer lo siguiente:

 if ('need to set button disable') button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY); else button.getBackground().setColorFilter(null); 

Espero haber ayudado a alguien …

 Button button = (Button)findViewById(R.id.buy_btn); button.setEnabled(false); 

Set Haga clic en false y cambie el color backgroung como:

 callButton.setClickable(false); callButton.setBackgroundColor(Color.parseColor("#808080")); 

Todas las respuestas dadas funcionan bien, pero recuerdo haber aprendido que usar setAlpha puede ser una mala idea en cuanto a rendimiento (más información aquí ). Así que la creación de un StateListDrawable es una mejor idea para gestionar el estado de los botones deshabilitado. Así es cómo:

Cree un XML btn_blue.xml en la carpeta res / drawable:

 <!-- Disable background --> <item android:state_enabled="false" android:color="@color/md_blue_200"/> <!-- Enabled background --> <item android:color="@color/md_blue_500"/> 

Cree un estilo de botón en res / values ​​/ styles.xml

 <style name="BlueButton" parent="ThemeOverlay.AppCompat"> <item name="colorButtonNormal">@drawable/btn_blue</item> <item name="android:textColor">@color/md_white_1000</item> </style> 

A continuación, aplique este estilo a su botón:

 <Button android:id="@+id/my_disabled_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/BlueButton"/> 

Ahora cuando llamas btnBlue.setEnabled(true) o btnBlue.setEnabled(false) los colores de estado cambiarán automáticamente.

Debe crear un archivo XML para el botón deshabilitado ( drawable / btn_disable.xml )

 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/grey" /> <corners android:radius="6dp" /> </shape> 

Y crear un selector para el botón ( drawable / btn_selector.xml )

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/btn_disable" android:state_enabled="false"/> <item android:drawable="@drawable/btn_default" android:state_enabled="true"/> <item android:drawable="@drawable/btn_default" android:state_pressed="false" /> </selector> 

Agregue el selector a su botón

 <style name="srp_button" parent="@android:style/Widget.Button"> <item name="android:background">@drawable/btn_selector</item> </style> 

U puede hacer una imagen gris y poner en su dibujable y añadir esto en su código.

 button.setBackgroundResource(R.drawable.grey); 

Fácil, simple, pero debido a usar la imagen consigue un poco más espacio.

  • Escala drawableLeft en el botón con el texto
  • Android button textAppearance
  • Botón con diseño XML personalizado
  • ¿Pasar un argumento al llamar a setOnClickListener?
  • ¿Es posible crear un ToggleButton sin texto?
  • Android - Set Haga clic en el botón de enfoque
  • ¿Cómo desactivar el clic de sonido del botón físico (efectos de sonido) en mi aplicación para Android?
  • Cómo mostrar un botón en la posición de pantalla aleatoria
  • Obtener fantasía con diseños de botones de menú de Android
  • Botón setOnClickListener () vs android: onclick
  • Android Programar el texto del botón mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.