2011-06-28 13 views
13

Dado que tengo un dibujable fondo para crear bulletpoints para TextViews así:<size> atributo no es útil cuando se usa layer-list?

Example of what I want

Entonces mi código XML tiene el siguiente aspecto:

<?xml version="1.0" encoding="utf-8"?> 

<layer-list 
     xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:right="235dp"> 
     <shape android:shape="oval"> 
      <padding android:left="10dp" /> 
      <size android:height="5dp" android:width="5dp"/> 
      <solid android:color="@color/my_pink"/> 
     </shape> 
    </item> 
    <item android:left="10dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#ffffff"/> 
      <padding android:left="10dp" /> 
     </shape> 
    </item> 
</layer-list> 

Pero una vez que utilizo el código mostrado anteriormente, mi viñetas se ven así:

Result of the XML shown above

Parece que la etiqueta <size> se ignora por completo.

¿Cómo resolvería este problema? Usando un parche 9, sí lo sé ... tal vez sea lo más fácil de hacer ... pero de hecho esperaba encontrar una solución XML, ya que es más flexible en el futuro.

El dibujo personalizado también está fuera de cuestión.

+1

Mira mi respuesta http://stackoverflow.com/questions/26841517/layer-list-ignore-size-tag/ – offset

Respuesta

6

<size> etiqueta ciertamente funciona en layer-list y para mostrar los puntos de la bala para textviews que puede utilizar el atributo xml android:drawableLeft ->link

Con este enfoque, no hay necesidad de 9-parche y dibujo personalizado.

Código de publicación & captura de pantalla aquí para la referencia.

res/estirable/bullet_point_layer.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:right="3dp"> 
    <shape android:shape="oval"> 
     <padding android:left="10dp" /> 
     <size android:height="10dp" android:width="10dp"/> 
     <solid android:color="#ff0080"/> 
    </shape> 
</item> 

res/layout/main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView one" 
    android:textColor="@android:color/black" 
    android:drawableLeft="@drawable/bullet_point_layer" 
    android:background="@android:color/white" /> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView Two" 
    android:textColor="@android:color/black" 
    android:drawableLeft="@drawable/bullet_point_layer" 
    android:background="@android:color/white" /> 

</LinearLayout> 

¿Cómo se ve

+0

Eso es ciertamente una buena solución. No pensé en DrawableLeft antes. ¡Gracias! –

+0

@Vijay C: etiqueta está trabajando o no en la lista de capas ?? usted dijo " tag ciertamente funciona en la lista de capas", también tengo un problema en RatingsBar como este punto, la estrella se estira verticalmente, ¿hay alguna forma de establecer la altura en wrap_content? – Jayesh

+0

@Jayesh has usado el drawableLeft? –

5

Esta es una publicación anterior pero pensé que agregaría algo muy importante que falta en esta publicación.

Desde mi experiencia, el último artículo del <layer-list> será el artículo del que se toma el valor de tamaño.

Por lo tanto, en este ejemplo, creo una línea divisora ​​de dos líneas. Especifico un elemento vacío al final para especificar la altura dibujable del divisor.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="#535353" /> 
     </shape> 
    </item> 

    <item android:top="@dimen/common_divider_line_half_size"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#737373" /> 
     </shape> 
    </item> 

    <!-- Last item empty to specify divider height --> 
    <item> 
     <shape android:shape="rectangle"> 
      <size android:height="@dimen/common_divider_line_size"/> 
      <solid android:color="@android:color/transparent" /> 
     </shape> 
    </item> 
</layer-list> 
+1

Muy interesante. –

+0

Establezca ImageView scaleType para adaptarse aXY, de esta manera no tiene que establecer las dimensiones. Lo siguiente funcionará: Johan

+0

No. Debajo de Android 21, ya sea etiqueta de tamaño o Android: el sistema ignora los atributos de ancho/alto. – DYS

Cuestiones relacionadas