Tengo un botón definido como se muestra a continuación. Cuando quiero desactivarlo lo uso my_btn.setEnabled(false)
, pero también me gustaría atenuarlo. ¿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>
Respuestas:
Debe proporcionar 3 o 4 estados en su
btn_defaut.xml
como selector.Proporcionará efectos y antecedentes para los estados en consecuencia.
Aquí hay una discusión detallada: Botón estándar de Android con un color diferente
fuente
android:state_disable="true"
mostrará el estado cuando el Botón está desactivado, de la manera más fácil y recomendada.android:state_disable="true"
, ¿verdad? ¿Te refieres aandroid:state_enabled="false"
?También puede hacer que aparezca como deshabilitado configurando el alfa (haciéndolo semitransparente). Esto es especialmente útil si el fondo de su botón es una imagen y no desea crear estados para ella.
actualización: escribí la solución anterior antes de Kotlin y cuando era un novato. Es más una solución "rápida y sucia", pero no la recomiendo en un entorno profesional.
Hoy, si quisiera una solución genérica que funcione en cualquier botón / vista sin tener que crear una lista de estados, crearía una extensión de Kotlin.
En Java, puede hacer algo similar con una función util estática y solo tendría que pasar la vista como variable. No es tan limpio pero funciona.
fuente
View
. Desde este puesto de G + : "Si su vista no contiene comandos de dibujo se superponen,setAlpha()
se ha optimizado de distancia y simplemente modificar los objetos para aplicar el alfa adecuada la pintura Esto sucede cuando.View.hasOverlappingRendering()
Retornos cierto.ImageView
S, yTextView
es que no tienen antecedentes dibujable son candidatos comunes para este optimización. Si se encuentra en esta situación, utilice lasetAlpha()
cantidad que desee ".La solución más fácil es configurar el filtro de color en la imagen de fondo de un botón como vi aquí.
Puedes hacer lo siguiente:
Espero haber ayudado a alguien ...
fuente
Mode.SRC_IN
debería usarse en lugar de Multiplicar. Ver stackoverflow.com/a/17112876/550471Todas las respuestas dadas funcionan bien, pero recuerdo haber aprendido que usar setAlpha puede ser una mala idea en cuanto al rendimiento (más información aquí ). Entonces, crear un StateListDrawable es una mejor idea para administrar el estado deshabilitado de los botones. Así es cómo:
Cree un XML btn_blue.xml en la carpeta res / drawable:
Cree un estilo de botón en res / values / styles.xml
Luego aplique este estilo a su botón:
Ahora, cuando llame a
btnBlue.setEnabled(true)
O,btnBlue.setEnabled(false)
los colores del estado cambiarán automáticamente.fuente
Establezca Clickable como falso y cambie el color de fondo como:
fuente
Debe crear un archivo XML para el botón deshabilitado ( drawable / btn_disable.xml )
Y crea un selector para el botón ( drawable / btn_selector.xml )
Agrega el selector a tu botón
fuente
fuente
Usé este código para eso:
fuente
Probé las soluciones anteriores, pero ninguna de ellas pareció funcionar para mí. Fui con la siguiente opción:
fuente