2012-04-16 9 views
5

Necesito crear un dibujable de forma xml que dibuje un rectángulo sin la línea superior (una "forma de u"). Lo que soy capaz de hacer es dibujar un rectángulo, así:Forma dibujable de Android xml: ¿cómo dibujar una forma de u?

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 

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

<corners 
    android:bottomLeftRadius="0dp" 
    android:bottomRightRadius="0dp" 
    android:radius="1dp" 
    android:topLeftRadius="10dp" 
    android:topRightRadius="10dp" /> 

<padding 
    android:bottom="2dip" 
    android:left="1.5dip" 
    android:right="1.5dip" 
    android:top="8dip" /> 

<stroke 
    android:width="1dip" 
    android:color="@color/detailtable_border" /> 

Pero, ¿cómo - si es posible, puedo definir la misma forma sin la línea superior (o inferior)?

Respuesta

10

Puede intentar usar una lista de capas. A ver si algo como esto funcionaría:

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

    <item android:left="1.5dp" android:right="1.5dp" android:bottom="2dp"> 
     <shape android:shape="rectangle"> 
     <solid android:color="@color/detailrow_bg_normal" /> 
     </shape> 
    </item> 
</layer-list> 

Este (debería) llenar el rectángulo con el color del borde, y luego superponer con el color de fondo por defecto, dejando la cantidad apropiada de la derecha/izquierda de la frontera/fondo de color que indican .

+2

Excelente: lo hizo a ciegas :). Me alegra saber que ayudó. – Femi

0

Es posible que pueda lograr esto utilizando dos formas y un LayerList, pero creo que es una solución mejor y más fácil de usar que un NinePatch -dispensable.

+0

Pensado en eso pero requeriría cambios considerables en la solución ya implementada, realmente preferiría la forma de xml). – Bachi

2

probar este código y también se refiere esta link :::

que logra una buena solución con éste:

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

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- This is the line --> 
    <item android:top="-1dp" android:right="-1dp" android:left="-1dp"> 
     <shape> 
      <solid android:color="@android:color/transparent" /> 
      <stroke android:width="1dp" android:color="#ffffff" /> 
     </shape> 
    </item> 

</layer-list> 

Esto funciona bien en caso de que necesite un color transparente, pero sigue siendo un derrame cerebral abierta color (en mi caso solo necesitaba una línea de fondo). Si necesita un color de fondo, puede agregar un color de forma sólida como en la respuesta anterior.

+0

pruébalo debe funcionar –

Cuestiones relacionadas