wake-up-neo.com

Form als Hintergrund zu zeichnen, eine Linie am unteren Rand

Ich benutze eine Zeichenfläche als Hintergrund für eine Textansicht, nur um eine Trennlinie unter dem Text zu haben. A achivied es mit diesem drawable-xml:

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

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

56
ZoolWay

Im Allgemeinen versuche ich so wenig wie möglich mit Hintergründen zu experimentieren, es sei denn, dies ist unbedingt erforderlich, da hierdurch die Standardhintergrundfarben außer Kraft gesetzt werden, die Zustände für fokussiert, gedrückt usw. aufweisen. Ich empfehle lediglich die Verwendung einer zusätzlichen Ansicht (in einem vertikalen LinearLayout) so dick wie du es brauchst. Beispielsweise:

 <View 
       Android:background="#FF000000" 
       Android:layout_height="2dp" 
       Android:layout_width="fill_parent"/>
31
dmon

So habe ich eine Zeile am unteren Rand für meine. Zeichnen Sie einen Strich, schieben Sie den Gegenstand dann nach oben und zu den Seiten, damit der Strich oben und an den Seiten nicht angezeigt wird:

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

Ich denke, es ist eine bessere Lösung:

<?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>
28
Dmitry Velychko

Normalerweise für ähnliche Aufgaben - ich habe eine Layer-Liste erstellt, die so gezeichnet werden kann:

<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, dass Sie zuerst das Rechteck mit underlineColor zeichnen und dann darüber ein weiteres Rechteck mit der tatsächlichen buttonColor zeichnen, aber bottomPadding anwenden. Es funktioniert immer.

Aber wenn ich buttonColor haben musste, um transparent zu sein, konnte ich das oben genannte Zeichenprogramm nicht verwenden. Ich habe noch eine Lösung gefunden

<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 Sie hier sehen können, ist mainButtonColor transparent und white_box ist nur ein einfaches Rechteck, das mit white Solid gezeichnet werden kann.)

6
Lanitka

Mit dieser Lösung können Sie, wo immer Sie eine andere Leitung benötigen. Meine Anforderung wurde nur unterstrichen. Sogar Sie können dem Layout verschiedene Farben geben. Sie können sehen in 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>
</layer-list>
3
Tara

Eine einfache Lösung ist das Erweitern einer Textansicht und das Überschreiben von onDraw.

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint();
    Paint.setColor(ContextCompat.getColor(getContext(),R.color.colorTextUnderLine));
    Paint.setStrokeWidth(10);
    canvas.drawLine(0.0f,canvas.getHeight(),canvas.getWidth(),canvas.getHeight(),
            Paint);
}
0
Freddie