2011-07-28 10 views
12
archivo XML guardado en

res/estirable/gradient_box.xml:La forma extraíble no se muestra cuando se usa en combinación con Android: atributo drawableBottom.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFF0000" 
     android:endColor="#80FF00FF" 
     android:angle="45"/> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
</shape> 

(La definición de la forma anterior se está tomado de guía para desarrolladores de Android a continuación, No hay errores en ella..).

Vamos a tratar de usarlo junto con un TextView:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Text with some crazy rectangle shape below it." 
    android:drawableBottom="@drawable/gradient_box"/> 

Las pantallas TextView como si el atributo drawableBottom no estaba allí! Sin embargo, establecer la forma como el fondo funciona muy bien:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Text with crazy background" 
    android:background="@drawable/gradient_box"/> 

Configuración de una imagen real (por ejemplo, un * .png) para el androide: drawableBottom también funciona bien.

¿Alguna idea?

Respuesta

31

¡Lo resolvió! El problema parece ser que una forma no necesariamente tiene límites intrínsecos. Es decir, ¡el dibujante resultante no sabe cómo dibujarse!

Para resolver este problema, basta con especificar el tamaño de la forma, de esta manera:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFF0000" 
     android:endColor="#80FF00FF" 
     android:angle="45"/> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
    <size android:width="xxdp" 
      android:height="xxdp"/> 
</shape> 

Cuando la forma se especifica como un dibujable de fondo para la Vista de Texto, se conocen sus dimensiones a ser el mismo que el Dimensiones de TextView. Al indicarle a la forma que vaya a la derecha o encima de TextView, las dimensiones de la forma no se pudieron determinar automáticamente.

+4

No es posible establecer el ancho de match_parent en ese caso. –

+1

Para mí, configurar el degradado drawable funcionó cuando lo configuré programáticamente, es decir, como aquí https://stackoverflow.com/questions/8481322/create-a-radial-gradient-programmatically – foo

1

Si está utilizando un ImageView para alojar la forma de línea como parte del atributo "android: src", también se encontrará con el mismo problema a menos que especifique el ancho y la altura como parte de la forma xml. Una solución es alojar la forma de línea como parte del atributo "android: background" de ImageView. De esta forma, puede utilizar los atributos de tamaño de ImageView para que la forma de línea se "muestre".

Cuestiones relacionadas