2009-08-15 7 views
43

Estoy intentando establecer el relleno en un <shape> declarado dentro de un archivo/diseño XML. Pero sea lo que sea que establezca, nada cambia relacionado con el relleno. Si modifico otras propiedades, veo los efectos en la UI. Pero no funciona con relleno. ¿Podría informarnos sobre las posibles razones por las cuales esto podría ocurrir?El relleno no afecta a <shape> en un diseño XML

Aquí está la forma de XML que estoy tratando de estilo:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" 
> 
    <stroke android:width="1dp" android:color="#ffffff" 
      android:dashWidth="2dp" 
    /> 

    <solid android:color="@color/button_white_cover" /> 

    <corners android:radius="11dp" /> 

    <padding android:left="1dp" 
      android:top="20dp" 
      android:right="20dp" 
      android:bottom="2dp" /> 
</shape> 

Respuesta

81

fin he resuelto mi problema con el acolchado.

Así que el relleno aquí no tendrá ningún efecto en la forma. En lugar de esto, tendrá que aplicar relleno en otro dibujable que lo usará. Por lo tanto, tengo una estirable que utiliza la forma y hay que hacer lo siguiente:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/shape_below"/> 
    <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/> 
</layer-list> 

Por lo tanto, como se puede ver en la segunda <item> -elemento que establecer el relleno (arriba y derecha). Y después de esto todo funciona.

Gracias.

+0

Hola, no entienden cómo aplicar esta solución al problema. Tengo un botón que usa la forma y configuración adnroid: top y android: right no tiene efecto. ¿Cómo podría resolver esto? Gracias. – icecream

+2

Creo que lo que Lyubomyr está diciendo es hacer algo como esto, lo cual funciona para mí, pero las esquinas siempre tienen un fondo blanco opaco, causando problemas de visualización (¡perdón por el formato en los comentarios!): \t \t \t \t \t \t \t \t \t \t DustinB

+0

También fuera del tema, pero podría ser útil: si el dibujo utilizado es solo un color, también puede escribir como android: drawable = "@ color/divider". PERO esto se rompe en dispositivos más antiguos. Lo probé en 2.2 y estaba roto. No estoy seguro de en qué nivel se volvió aceptable. – Pijusn

13

La respuesta por Lyobomyr funciona, pero aquí es la misma solución aplicada, pero sin la sobrecarga de crear un nuevo estirable, por lo tanto, minimizando el archivo desorden:

How to add padding to gradient <shape> in Android?

+0

Gracias por esta respuesta Yahel, pero recuerde no publicar solo las respuestas del enlace. Siempre proporcione toda la información necesaria en su respuesta ya que el contenido del enlace puede cambiar o dejar de ser válido. – TheIT

31

Como un par de comentarios han aludido , el mejor enfoque es envolver el <shape> en un elemento <item> y configurar el relleno en su lugar. Sin embargo, hay otras opciones disponibles que se detallan en el siguiente enlace. por ejemplo

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:left="8dp" 
     android:right="8dp" 
     android:top="8dp" 
     android:bottom="8dp"> 

     <shape android:shape="rectangle"> 
      ... 
     </shape> 
    </item> 
</layer-list> 

Dependiendo de sus necesidades, en lugar de utilizar una capa de vinos, lo que podría utilizar cualquiera de los siguientes tipos dibujable:

  • capa de lista
  • selector de
  • nivel de lista
  • transición

Para obtener más información ab los tipos dibujable disponibles ver this android documentation

Fuentes:

+0

Sí, no mencionó '' – user924

+0

@ user924 No estoy seguro de cuál es su punto. Se puede incluir el artículo dentro de un si sirve para los propósitos, pero no es necesario para la pregunta original ni para transmitir la solución general que es anidar el contenido dentro de un con relleno – TheIT

+1

Quiero decir que es mejor dar un ejemplo que usted puede copiar y ejecutar sin ediciones, pero en este caso no se resolvió (porque debería estar dentro de ) – user924

3

He resuelto este problema como este:

<shape android:shape="oval" > 
    <stroke android:width="4dp" android:color="@android:color/transparent" /> 
    <solid android:color="@color/colorAccent" /> 
</shape> 

acaba de agregar un golpe transparente.

0

Usted puede tratar de inserciones:

<?xml version="1.0" encoding="UTF-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetBottom="2dp" 
    android:insetLeft="1dp" 
    android:insetRight="20dp" 
    android:insetTop="20dp"> 

    <shape android:shape="rectangle"> 

     <stroke 
      android:width="1dp" 
      android:color="#ffffff" 
      android:dashWidth="2dp" /> 

     <solid android:color="@color/button_white_cover" /> 

     <corners android:radius="11dp" /> 
    </shape> 

</inset> 
Cuestiones relacionadas