Ich muss ein Android-Shape erstellen, sodass nur der untere Strich (eine gestrichelte Linie) angezeigt wird. Wenn ich Folgendes versuche, halbiert der Strich die Form durch die Mitte. Weiß jemand, wie man es richtig macht? Der Strich muss die unterste Linie/Grenze sein. Ich verwende die Form als Hintergrund für eine Textansicht. Bitte vergiss nicht warum ich es brauche.
<?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="#1bd4f6" />
</shape>
</item>
<item>
<shape Android:shape="line" >
<padding Android:bottom="1dp" />
<stroke
Android:dashGap="10px"
Android:dashWidth="10px"
Android:width="1dp"
Android:color="#ababb2" />
</shape>
</item>
</layer-list>
Es ist eine Art Hack, aber ich denke, das ist wahrscheinlich der beste Weg, es zu tun. Die gestrichelte Linie wird unabhängig von der Höhe immer unten angezeigt.
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#1bd4f6" />
</shape>
</item>
<item Android:top="-2dp" Android:right="-2dp" Android:left="-2dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke
Android:dashGap="10px"
Android:dashWidth="10px"
Android:width="1dp"
Android:color="#ababb2" />
</shape>
</item>
</layer-list>
Die zweite Form ist ein transparentes Rechteck mit einer gestrichelten Kontur. Der Schlüssel, um die Umrandung nur am unteren Rand erscheinen zu lassen, liegt in den negativen Rändern der anderen Seiten. Diese negativen Ränder "schieben" die gestrichelte Linie außerhalb des gezeichneten Bereichs auf diesen Seiten und lassen nur die Linie am unteren Rand zurück. Ein möglicher Nebeneffekt (den ich nicht ausprobiert habe) ist, dass bei Ansichten, die außerhalb ihrer eigenen Grenzen liegen, die Grenzen des negativen Randes sichtbar werden.
Das macht den Trick ...
<item >
<shape Android:shape="rectangle">
<solid Android:color="#YOUR_BOTTOM_LINE_COLOR"/>
</shape>
</item>
<item Android:bottom="1.5dp">
<shape Android:shape="rectangle">
<solid Android:color="#YOUR_BG_COLOR"/>
</shape>
</item>
<?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"
Android:bottom="0dp">
<shape Android:shape="rectangle">
<solid Android:color="#88FFFF00"/>
<stroke
Android:width="5dp"
Android:color="#FF000000"/>
</shape>
</item>
</layer-list>
Diese Antwort ist für die Google-Suchenden, die den gepunkteten unteren Rand von EditText
wie hier anzeigen möchten.
Erstellen Sie dotted.xml
im Ordner drawable
und fügen Sie diese ein
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:bottom="1dp"
Android:left="-2dp"
Android:right="-2dp"
Android:top="-2dp">
<shape Android:shape="rectangle">
<stroke
Android:width="0.5dp"
Android:color="@Android:color/black" />
<solid Android:color="#ffffff" />
<stroke
Android:width="1dp"
Android:color="#030310"
Android:dashGap="5dp"
Android:dashWidth="5dp" />
<padding
Android:bottom="5dp"
Android:left="5dp"
Android:right="5dp"
Android:top="5dp" />
</shape>
</item>
</layer-list>
Dann setzen Sie einfach das Android:background
-Attribut auf dotted.xml
, das wir gerade erstellt haben. Ihr EditText
sieht so aus.
<EditText
Android:id="@+id/editText"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Some Text"
Android:background="@drawable/dotted" />
Ich empfinde es als unkompliziert, ohne diese negativen Polsterungen oder Störche.
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@color/main_bg_color"/>
<item Android:gravity="bottom">
<shape Android:shape="rectangle">
<size Android:height="5dp"/>
<solid Android:color="@color/bottom_bar_color"/>
</shape>
</item>
</layer-list>
Ich denke, Sie brauchen keine Form, wenn ich Sie verstanden habe.
Wenn Sie wie im folgenden Bild aussehen, verwenden Sie das folgende Layout.
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:background="#1bd4f6"
Android:paddingBottom="4dp" >
<TextView
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:background="#ababb2"
Android:padding="5dp"
Android:text="Hello Android" />
</RelativeLayout>
</RelativeLayout>
EDIT
wenn Sie mit diesen Eigenschaften spielen, erhalten Sie ein Ergebnis
Android:top="dimension"
Android:right="dimension"
Android:bottom="dimension"
Android:left="dimension"
versuchen Sie es so
<?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="#1bd4f6" />
</shape>
</item>
<item Android:top="20px"
Android:left="0px">
<shape Android:shape="line" >
<padding Android:bottom="1dp" />
<stroke
Android:dashGap="10px"
Android:dashWidth="10px"
Android:width="1dp"
Android:color="#ababb2" />
</shape>
</item>
</layer-list>
Versuchen Sie es mit dem folgenden XML-Code:
<layer-list>
<item Android:top="-2dp" Android:right="-2dp" Android:left="-2dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke
Android:width="1dp"
Android:color="#fff" />
</shape>
</item>
</layer-list>
Eine einfache Lösung:
Erstellen Sie eine zeichnbare Datei als edittext_stroke.xml im drawable-Ordner . Fügen Sie den folgenden Code hinzu:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="line"
>
<stroke
Android:width="1dp"
Android:color="@Android:color/white" >
</stroke>
</shape>
Fügen Sie in der Layout-Datei den Zeichnungssatz als edittext hinzu
Android: drawableBottom = "@ drawable/edittext_stroke"
<EditText
Android:textColor="@Android:color/white"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:drawableBottom="@drawable/edittext_stroke"
/>
Normalerweise für ähnliche Aufgaben - Ich habe eine Ebenenliste erstellt, die wie folgt 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, jedoch bottomPadding anwenden. Es funktioniert immer.
Aber wenn ich buttonColor brauchte, um transparent zu sein, konnte ich das obige Zeichen nicht verwenden. Ich habe eine weitere 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 die mainButtonColor transparent und white_box ist ein einfaches Rechteck, das mit einem weißen Körper gezeichnet werden kann.)
es ist vollständig transparenter Edittext mit transparentem Hintergrund.
<item>
<shape Android:shape="rectangle" >
<solid Android:color="@color/transparent" />
</shape>
</item>
<item Android:top="-3dp" Android:right="-3dp" Android:left="-3dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke
Android:width="2dp"
Android:color="@color/bottomline" />
</shape>
</item>
Das hat für mich am besten funktioniert:
<?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" Android:bottom="0dp">
<shape Android:shape="rectangle">
<stroke Android:width="4dp" Android:color="#ff0000"/>
</shape>
</item>
</layer-list>
Zeigt nur die Zeile unten an. Sie können einfach die Strichbreite ändern, um die gewünschte Größe festzulegen, und auch die obere, linke, rechte Seite entsprechend aktualisieren.
verwenden Sie diese XML, ändern Sie die Farbe mit Ihrer Wahl.
<item>
<layer-list>
<item>
<shape>
<solid Android:color="@color/gray_500" />
</shape>
</item>
<!-- CONTENT LAYER -->
<item Android:bottom="2dp" >
<shape>
<solid Android:color="#ffffff" />
</shape>
</item>
</layer-list>
</item>
Wenn Sie programmgesteuert möchten
public static Drawable getStorkLineDrawable(@ColorInt int colorStrok, int iSize, int left, int top, int right, int bottom)
{
GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setShape(GradientDrawable.RECTANGLE);
gradientDrawable.setStroke(iSize, colorStrok);
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{gradientDrawable});
layerDrawable.setLayerInset(0, left, top, right, bottom);
return layerDrawable;
}
nennen Sie diese Methode gerne
Drawable yourLineDrawable= getStorkLineDrawable(yourColor, iSize, -iSize, -iSize, -iSize, 0);