studio - Cómo establecer la opacidad(Alpha) para la vista en Android
color transparente android studio (12)
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;
}
}
Tengo un botón como el siguiente:
<Button
android:text="Submit"
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
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.
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 <alfa <1) puede tener implicaciones de rendimiento. Por lo general, es mejor utilizar la propiedad alfa con moderación y de forma transitoria, como en el caso de las animaciones de desvanecimiento.
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);
Lo que le sugiero que haga es crear un color ARGB personalizado en su archivo colors.xml, como por ejemplo:
<resources>
<color name="translucent_black">#80000000</color>
</resources>
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
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#80000000"
android:endColor="#80FFFFFF"
android:angle="45"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="8dp" />
</shape>
Luego utilízalo como fondo del botón:
android:background="@drawable/rounded_corner_box"
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 +:
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Content">
<RelativeLayout style="@style/ButtonHolder">
<Button android:id="@+id/myButton"
style="@style/Button"
android:text="@string/proceed"/>
</RelativeLayout>
</LinearLayout>
ButtonHolder.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
</shape>
</item>
</layer-list>
styles.xml
.
.
.
<style name="ButtonHolder">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:background">@drawable/buttonholder</item>
</style>
<style name="Button" parent="@android:style/Widget.Button">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textStyle">bold</item>
</style>
.
.
.
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:
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
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
<corners android:radius="2dp" />
</shape>
</item>
</layer-list>
El resultado final se ve así:
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).
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).
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.
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 :-)
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)
.
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")
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<solid
android:color="#70c656" />
<stroke
android:width="1dp"
android:color="#53933f" />
<corners
android:radius="4dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="#70c656"
android:endColor="#53933f"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#53933f" />
<corners
android:radius="4dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
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)
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:alpha atributo android:alpha xml que toma un valor entre 0 y 1. El método correspondiente es setAlpha(float) .