2012-03-28 6 views
38

Ich benutze ein Zeichen als Hintergrund eines TextView, nur um eine Trennlinie unter dem Text zu haben. Ein achivied es mit diesem ziehbar-xml:Form als Hintergrund, eine Linie am unteren Rand zeichnen

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape 
     android:shape="rectangle"> 
      <solid android:color="#FFDDDDDD" /> 
      <gradient 
       android:angle="0" 
       android:startColor="#FFAAAAAA" 
       android:endColor="#FFEEEEEE" 
       /> 
     </shape> 
    </item> 

    <item android:bottom="2dp"> 
     <shape 
     android:shape="rectangle"> 
      <solid android:color="#FF000000" /> 
     </shape> 
    </item> 

</layer-list> 

Aber diese Methode zeichnet ein farbiges Rechteck über einem schwarzen Rechteck. Ich möchte nur die Linie am unteren Rand der Form haben, ohne schwarzes Rechteck, weil Schwarz nicht transparent ist. Wie könnte ich das erreichen?

+0

scheint übertrieben. Warum nicht einfach eine farbige Ansicht verwenden? – dmon

+0

Gleiches gilt - wie füge ich eine dünne Linie am Ende dieser Ansicht hinzu? – ZoolWay

+2

Das ist was ich meinte, die Sicht ist die Linie. '' – dmon

Antwort

27

Im Allgemeinen versuche ich so wenig wie möglich mit Hintergründen zu durcheinander zu bringen, es sei denn, dies ist absolut notwendig, da dies die standardmäßigen Hintergrundfarben außer Kraft setzt, die einen fokussierten, gedrückten usw. Status haben LinearLayout), das so dick ist, wie Sie es benötigen. Zum Beispiel:

<View 
     android:background="#FF000000" 
     android:layout_height="2dp" 
     android:layout_width="fill_parent"/> 
+7

hmmm ich bin nicht sehr überzeugt von deiner lösung, denn es braucht ein zusätzliches layout und eine zusätzliche sicht, beide sind schwer Objekte nur für eine horizontale Linie ...Wenn Sie allergisch auf Hintergründe sind, warum nicht onDraw() überschreiben und nur eine Linie zeichnen? – rupps

+4

Es ist schmutzige Workaround – ruX

+0

ahahahahaha sehr einfach, sehr brillant. Ich habe versucht, ohne Erfolg einen einfachen Bottom-Line-Hintergrund zu tun. Warum denke ich das nicht? danke – pablobaldez

158

Dies ist, wie ich eine Zeile an der Unterseite für meine bekam. Zeichnen Sie einen Schlaganfall, aber dann das Element verschieben und an den Seiten die Oberseite und die Seiten zu bekommen nicht den Hub zeigen:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:top="-6dp" android:left="-6dp" android:right="-6dp"> 
     <shape> 
      <solid android:color="#2b7996"/> 
      <stroke android:color="#33b5e5" android:width="6dp"/> 
     </shape> 
    </item> 
</layer-list> 
+14

Dies sollte die akzeptierte Antwort IMO sein, da es eine direkte Lösung für das Problem gibt. – Abhishek

+0

Ich klang wie die OP wollte vermeiden, dass Farbe in der festen Fläche. Das ist der Fall. Anstelle von # 2b7996 könnte der Solid mit # 00000000 transparent sein. Ein achtstelliger Hexadezimalwert gibt das Alpha mit den ersten beiden Ziffern an. –

+0

Brilliant Workaround :) – eMich

9

Ich denke, es bessere Lösung ist:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:gravity="bottom"> 
     <shape> 
      <size android:height="1dp" /> 
      <solid android:color="#000000" /> 
     </shape> 
    </item> 
</layer-list> 
+0

Diese Lösung funktioniert für fast alle Geräte außer Samsung Lollipop. Die gesamte Ansicht wird mit der Farbe gezeichnet, die im 'solid' Tag zur Verfügung steht. Dies sollte wegen Samsung Marktanteil nicht ignoriert werden. –

1

Mit dieser Lösung, wo immer Sie benötigen eine andere Linie, die Sie können. Meine Anforderung war nur unterstrichen. Auch Sie können dem Layout verschiedene Farben geben. Sie können unten Bild, weiße Linie enter image description here

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

<item android:top="-5dp" android:left="-5dp" android:right="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/white" android:width="5dp"/> 
    </shape> 
</item> 

<item android:top="-5dp" android:bottom="-5dp" android:right="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/colorPrimaryDark" android:width="5dp"/> 
    </shape> 
</item> 

<item android:bottom="-5dp" android:left="-5dp" android:right="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/colorPrimaryDark" android:width="5dp"/> 
    </shape> 
</item> 

<item android:top="-5dp" android:left="-5dp" android:bottom="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/colorPrimaryDark" android:width="5dp"/> 
    </shape> 
</item> 

<item android:bottom="2dp" android:left="5dp" android:right="5dp" android:top="5dp"> 
    <shape> 
     <solid android:color="@color/colorPrimary"/> 

     <corners android:bottomRightRadius="0dp" 
      android:bottomLeftRadius="0dp" 
      android:topLeftRadius="0dp" 
      android:topRightRadius="0dp" /> 
    </shape> 

</item> 

2

Regel für ähnliche Aufgaben sehen in - I-Schicht-Liste ziehbar wie diese erstellt:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/underlineColor"/> 
    </shape> 
</item> 
<item android:bottom="3dp"> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/buttonColor"/> 
    </shape> 
</item> 

Die Idee ist, Zeichnen Sie zuerst das Rechteck mit underlineColor und dann zeichnen Sie ein weiteres Rechteck mit der eigentlichen buttonColor, aber mit bottomPadding. Es funktioniert immer.

Aber wenn ich buttonColor brauchte, um transparent zu sein, konnte ich das oben genannte drawable nicht verwenden. Ich fand eine weitere Lösung

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

<item android:drawable="@drawable/white_box" android:gravity="bottom" android:height="2dp"/> 
</layer-list> 

(wie man hier sehen kann, die mainButtonColor ist transparent und white_box ist nur ein einfaches Rechteck ziehbar mit weißen Feststoff)

+0

'android: gravity =" bottom "' benötigt min API 23 zu arbeiten. –

Verwandte Themen