Cómo establecer la opacidad (Alpha) para la vista en Android

Tengo un botón como el siguiente:

 

En mi evento onCreate() , estoy llamando Button01 de esta manera:

 setContentView(R.layout.main); View Button01 = this.findViewById(R.id.Button01); Button01.setOnClickListener(this); 

Hay un fondo en la aplicación, y quiero establecer una opacidad en este botón de envío. ¿Cómo puedo establecer una opacidad para esta vista? ¿Es algo que puedo establecer en Java, o puedo establecerlo en el archivo main.xml?

En Java, probé Button01.mutate().SetAlpha(100) , pero me dio un error.

Acabo de encontrar su pregunta al tener el mismo problema con un TextView. Pude resolverlo, extendiendo TextView y sobrescribiendo onSetAlpha . Tal vez podrías probar algo similar con tu botón:

 import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; public class AlphaTextView extends TextView { public AlphaTextView(Context context) { super(context); } public AlphaTextView(Context context, AttributeSet attrs) { super(context, attrs); } public AlphaTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onSetAlpha(int alpha) { setTextColor(getTextColors().withAlpha(alpha)); setHintTextColor(getHintTextColors().withAlpha(alpha)); setLinkTextColor(getLinkTextColors().withAlpha(alpha)); return true; } } 

Me sorprenden las respuestas MUCHO más complicadas de todos los demás.

XML

Simplemente puede definir el alfa en la definición de color del botón (o cualquier otra vista) en su xml:

 android:color="#66FF0000" // Partially transparent red 

En el ejemplo anterior, el color sería un rojo parcialmente transparente.

Al definir el color de una vista, el formato puede ser #RRGGBB o #AARRGGBB , donde AA es el valor alfa del hexadecimal. FF sería completamente opaco y 00 sería completamente transparente.

Dinamicamente

Si necesita modificar dinámicamente la opacidad en su código, use

 myButton.getBackground().setAlpha(128); // 50% transparent 

Donde la INT varía desde 0 (completamente transparente) a 255 (totalmente opaca).

Supongo que ya puede haber encontrado la respuesta, pero si no (y para otros desarrolladores), puede hacerlo así:

 btnMybutton.getBackground().setAlpha(45); 

Aquí configuré la opacidad en 45. Básicamente, puede establecerlo entre 0 (completamente transparente) y 255 (completamente opaco)

Lo que le sugiero que haga es crear un color ARGB personalizado en su archivo colors.xml, como por ejemplo:

  #80000000  

luego configura el fondo de tu botón a ese color:

 android:background="@android:color/translucent_black" 

Otra cosa que puede hacer si quiere jugar con la forma del botón es crear un recurso dibujable Shape donde configure las propiedades en las que se verá el botón:

archivo: res / drawable / rounded_corner_box.xml

       

Luego utilízalo como fondo del botón:

  android:background="@drawable/rounded_corner_box" 

De acuerdo con la vista de documentos de Android, alfa es un valor entre 0 y 1. Entonces, para configurarlo, use algo como esto:

 View v; v.setAlpha(.5f); 

Mucho más fácil de lo anterior. El atributo alfa predeterminado está ahí para el botón

 android:alpha="0.5" 

El rango está entre 0 para la transparencia completa y 1 para la opacidad completa.

 android:background="@android:color/transparent" 

Lo anterior es algo que sé … Creo que crear una clase de botón personalizado es la mejor idea

Nivel de API 11
Recientemente me encontré con este android: atributo alpha xml que toma un valor entre 0 y 1. El método correspondiente es setAlpha (float) .

Aunque btnMybutton.getBackground().setAlpha(45); Es una buena idea, solo aplica alfa a fondo y no a toda la vista.

Si desea aplicar alpha para ver, use btnMybutton.setAlpha(0.30f); en lugar. Esto aplica opacidad a Ver. Acepta un valor entre 0 y 1.

Doc dice:

Establece la opacidad de la vista. Este es un valor de 0 a 1, donde 0 significa que la vista es completamente transparente y 1 significa que la vista es completamente opaca. Si esta vista anula onSetAlpha (int) para que sea verdadera, esta vista es responsable de aplicar la opacidad misma. De lo contrario, llamar a este método equivale a llamar a setLayerType (int, android.graphics.Paint) y establecer una capa de hardware. Tenga en cuenta que establecer alfa a un valor translúcido (0

Me he encontrado con este problema con ICS / JB porque los botones predeterminados para el tema Holo consisten en imágenes que son ligeramente transparentes. Para un fondo esto es especialmente notable.

Gingerbread vs. ICS +:

Pan de jengibreICS

Copiar todos los estados dibujables e imágenes para cada resolución y hacer que las imágenes transparentes sean sólidas es un problema, así que opté por una solución más sucia: envuelva el botón en un soporte que tenga un fondo blanco. Aquí hay un borrador bruto de XML (ButtonHolder) que hace exactamente eso:

Su archivo XML

       

ButtonHolder.xml

         

styles.xml

 . . .   . . . 

Sin embargo, esto da como resultado un borde blanco porque las imágenes del botón Holo incluyen márgenes para dar cuenta del espacio presionado:

Demasiado blancoDemasiado blanco presionado

Entonces, la solución es dar al fondo blanco un margen (4dp trabajó para mí) y esquinas redondeadas (2dp) para ocultar completamente el blanco y hacer que el botón sea sólido:

ButtonHolder.xml

               

El resultado final se ve así:

No blancoSin blanco presionado

Debe apuntar a este estilo para v14 +, y modificarlo o excluirlo para Gingerbread / Honeycomb porque sus tamaños de imagen de botón nativos son diferentes de ICS y JB (por ejemplo, este estilo exacto detrás de un botón Gingerbread da como resultado un pequeño blanco debajo del botón).

Para una vista, puede establecer la opacidad de la siguiente manera.

 view_name.setAlpha(float_value); 

La propiedad view.setAlpha(int) está en desuso para la versión de la API superior a 11. De ahora en adelante, se utiliza una propiedad como .setAlpha(0.5f) .

Para API <11 para el color de la vista de texto hice lo siguiente:

 int textViewColor = textView.getTextColors().getDefaultColor(); textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent 

Un poco engorroso, pero bueno, funciona 🙂

Sé que esto ya tiene un montón de respuestas, pero descubrí que para los botones es más fácil crear tus propios selectores de .xml y configurar eso en el fondo de dicho botón. De esta manera, también puede cambiar su estado cuando se presiona o habilita, y así sucesivamente. Aquí hay un fragmento rápido de uno que uso. Si desea agregar una transparencia a cualquiera de los colores, agregue un valor hexadecimal principal (#XXcccccc). (XX == “alfa del color”)