2012-04-16 13 views
5

Ich muss ein Xml Shape-Zeichen erstellen, das ein Rechteck ohne die oberste Zeile (eine "U-Form") zeichnet. Was ich bin in der Lage zu tun ist, um ein Rechteck zu zeichnen, etwa so:Android Xml Shape Drawable - Wie zeichnet man eine U-Form?

<?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" /> 

Aber wie - wenn möglich, kann ich die gleiche Form, ohne oben (oder unten) Linie definieren?

Antwort

10

Sie könnten versuchen, eine Ebenenliste zu verwenden. Sehen Sie, wenn so etwas wie dies funktionieren würde:

<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> 

Dieses (soll) das Rechteck mit dem Rahmenfarbe füllen, dann überlagert mit der Standard-Hintergrundfarbe, die entsprechende Menge an dem rechten Seite verlassen/links/unterer Rand Farbe zeigt, .

+2

Ausgezeichnet: tat das blind :). Freut mich zu wissen, dass es geholfen hat. – Femi

0

Sie können dies möglicherweise mit zwei Formen und einem LayerList erreichen, aber ich denke, es ist sowohl eine bessere Lösung und einfacher zu verwenden NinePatch -entnehmbar.

+0

Dachte darüber, aber es würde erhebliche Änderungen an der bereits implementierten Lösung erfordern, würde ich wirklich die xml Form bevorzugen). – Bachi

2

diesen Code versuchen und auch verweisen diese link :::

ich eine gute Lösung mit diesem erreicht:

<?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> 

Dieses gut für den Fall arbeitet Sie eine transparente Farbe benötigen aber noch ein offener Schlag Farbe (In meinem Fall brauchte ich nur eine untere Zeile). Wenn Sie eine Hintergrundfarbe benötigen, können Sie eine feste Formfarbe wie in der obigen Antwort hinzufügen.

+0

versuchen, es muss funktionieren –