solid - Fondo de degradado LinearLayout de Android
transparent color android hex (7)
Tengo problemas para aplicar un fondo degradado a un LinearLayout.
Esto debería ser relativamente simple de lo que he leído pero parece que no funciona. Por motivos de referencia estoy desarrollando en 2.1-update1.
header_bg.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="90"
android:startColor="#FFFF0000"
android:endColor="#FF00FF00"
android:type="linear"/>
</shape>
main_header.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="horizontal"
android:background="@drawable/header_bg">
</LinearLayout>
Si cambio @ drawable / header_bg a un color, por ejemplo, # FF0000 funciona perfectamente bien. ¿Me estoy perdiendo algo obvio aquí?
En XML Drawable File:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient android:angle="90"
android:endColor="#9b0493"
android:startColor="#38068f"
android:type="linear" />
</shape>
</item>
</selector>
En su archivo de diseño: android: background = "@ drawable / gradient_background"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_background"
android:orientation="vertical"
android:padding="20dp">
.....
</LinearLayout>
Me gustaría comprobar su canal alfa en sus colores degradados. Para mí, cuando estaba probando mi código, tenía el canal alfa configurado incorrectamente en los colores y no funcionó para mí. Una vez que conseguí el canal alfa, todo funcionó!
Mi problema fue que la extensión .xml no se agregó al nombre de archivo del archivo XML recién creado. Agregar la extensión .xml solucionó mi problema.
No sé si esto ayudará a alguien, pero mi problema era que estaba tratando de establecer el gradiente en la propiedad "src" de un ImageView como:
<ImageView
android:id="@+id/imgToast"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:src="@drawable/toast_bg"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
No estoy 100% seguro de por qué eso no funcionó, pero ahora lo cambié y puse la propiedad dibujable en la propiedad "background" de la matriz de ImageView, que es un RelativeLayout en mi caso, así: (esto funcionó con éxito)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/custom_toast_layout_id"
android:layout_height="match_parent"
android:background="@drawable/toast_bg">
Ok he logrado resolver esto utilizando un selector. Ver código a continuación:
main_header.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="horizontal"
android:background="@drawable/main_header_selector">
</LinearLayout>
main_header_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:angle="90"
android:startColor="#FFFF0000"
android:endColor="#FF00FF00"
android:type="linear" />
</shape>
</item>
</selector>
Esperemos que esto ayude a alguien que tenga el mismo problema.
También es posible tener el tercer color (centro). Y diferentes tipos de formas.
Por ejemplo en drawable / gradient.xml:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#000000"
android:centerColor="#5b5b5b"
android:endColor="#000000"
android:angle="0" />
</shape>
Esto te da negro - gris - negro (de izquierda a derecha), que es mi atm de fondo oscuro favorito.
Recuerde agregar gradient.xml como fondo en su diseño xml:
android:background="@drawable/gradient"
También es posible rotar, con:
angle = "0"
te da una linea vertical
y con
angle = "90"
te da una linea horizontal
Los ángulos posibles son:
0, 90, 180, 270.
También hay algunos tipos diferentes de formas:
android: forma = "rectángulo"
Forma redondeada:
Android: forma = "ovalado"
Y probablemente un poco más.
Espero que ayude, salud!
Trate de eliminar Android: gradientRadius = "90". Aquí hay uno que me funciona:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<gradient
android:startColor="@color/purple"
android:endColor="@color/pink"
android:angle="270" />
</shape>