Ich habe eine Textansicht und möchte einen schwarzen Rand entlang der oberen und unteren Ränder hinzufügen. Ich habe versucht, android:drawableTop
und android:drawableBottom
zur Textansicht hinzuzufügen, aber dadurch wurde nur die gesamte Ansicht schwarz.
<TextView
android:background="@android:color/green"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableTop="@android:color/black"
android:drawableBottom="@android:color/black"
android:text="la la la" />
Gibt es eine Möglichkeit, einer Ansicht (insbesondere einer Textansicht) in Android auf einfache Weise einen oberen und unteren Rand hinzuzufügen?
android
border
android-view
textview
emmby
quelle
quelle
Antworten:
In Android 2.2 können Sie Folgendes tun.
Erstellen Sie eine XML-Zeichnungsdatei wie /res/drawable/textlines.xml und weisen Sie diese als Hintergrundeigenschaft von TextView zu.
/res/drawable/textlines.xml
Der Nachteil dabei ist, dass Sie eine undurchsichtige Hintergrundfarbe angeben müssen, da Transparentfolien nicht funktionieren. (Zumindest dachte ich, dass sie es taten, aber ich habe mich geirrt). Im obigen Beispiel sehen Sie, dass die Volltonfarbe der ersten Form #FFdddddd in die Strichfarbe der zweiten Form kopiert wird.
quelle
android:color="@null"
, um ein undurchsichtiges Hintergrundproblem zu vermeiden.Ich habe einen Trick verwendet, damit der Rand außerhalb des Containers angezeigt wird. Mit diesem Trick wird nur eine Linie gezeichnet, sodass der Hintergrund der zugrunde liegenden Ansicht angezeigt wird.
quelle
Option 1: Form zeichnbar
Dies ist die einfachste Option, wenn Sie einen Rahmen um ein Layout oder eine Ansicht möchten, in dem Sie den Hintergrund festlegen können. Erstellen Sie eine XML-Datei in dem
drawable
Ordner, der ungefähr so aussieht:Sie können das entfernen,
solid
wenn Sie keine Füllung wünschen. Der Satzbackground="@drawable/your_shape_drawable"
in Ihrem Layout / Ihrer Ansicht.Option 2: Hintergrundansicht
Hier ist ein kleiner Trick, den ich in einem verwendet habe
RelativeLayout
. Grundsätzlich haben Sie ein schwarzes Quadrat unter der Ansicht, der Sie einen Rand geben möchten, und geben dieser Ansicht dann etwas Polsterung (nicht Rand!), Damit das schwarze Quadrat an den Rändern durchscheint.Dies funktioniert natürlich nur dann ordnungsgemäß, wenn die Ansicht keine transparenten Bereiche aufweist. In diesem Fall würde ich empfehlen, einen benutzerdefinierten
BorderView
Code zu schreiben, der nur den Rand zeichnet - es sollten nur ein paar Dutzend Codezeilen sein.Wenn Sie sich fragen, es tut Arbeit mit
adjustViewBounds=true
. Es funktioniert jedoch nicht, wenn Sie einen Hintergrund in einem Ganzen haben möchtenRelativeLayout
, da es einen Fehler gibt , der Sie daran hindert , einenRelativeLayout
mit einem zu füllenView
. In diesem Fall würde ich das empfehlenShape
Drawable .Option 3: 9-Patch
Eine letzte Option ist die Verwendung eines 9-Patch-Zeichens wie dieses:
Sie können es in jeder Ansicht verwenden, in der Sie festlegen können
android:background="@drawable/..."
. Und ja, es muss 6x6 sein - ich habe 5x5 ausprobiert und es hat nicht funktioniert.Der Nachteil dieser Methode ist, dass Sie die Farben nicht einfach ändern können. Wenn Sie jedoch ausgefallene Ränder wünschen (z. B. nur einen Rand oben und unten, wie in dieser Frage), können Sie diese möglicherweise nicht mit dem
Shape
Zeichenelement ausführen , was nicht sehr mächtig ist.Option 4: Zusätzliche Ansichten
Ich habe vergessen, diese wirklich einfache Option zu erwähnen, wenn Sie nur Ränder über und unter Ihrer Ansicht haben möchten. Sie können Ihre Ansicht vertikal platzieren
LinearLayout
(falls noch nicht geschehen) und dannView
wie folgt leere s darüber und darunter hinzufügen :quelle
Hinzufügen eines
1dp
nur unten weißen Rand und einen transparenten Hintergrund zu erhalten, können Sie Folgendes verwenden, was einfacher ist als die meisten Antworten hier.Für die
TextView
oder eine andere Ansicht hinzufügen:Fügen Sie im
drawable
Verzeichnis das folgende XML hinzu, das aufgerufen wirdborderbottom.xml
Wenn Sie oben einen Rahmen wünschen, ändern Sie den
android:top="-2dp"
inandroid:bottom="-2dp"
Die Farbe muss nicht weiß sein und der Hintergrund muss auch nicht transparent sein.
Das
solid
Element ist möglicherweise nicht erforderlich. Dies hängt von Ihrem Design ab (danke V. Kalyuzhnyu).Grundsätzlich erstellt diese XML-Datei einen Rahmen mit der Rechteckform, schiebt dann jedoch die obere, rechte und linke Seite über den Renderbereich für die Form hinaus. Dadurch bleibt nur der untere Rand sichtbar.
quelle
-2dp
vs1dp
)? Scheint zu funktionieren, wenn sie gleich groß sind (-1
und1
).-2dp
das Ergebnis immer sauber. Ich denke, es gab einen Testfall, bei dem das Ergebnis nicht sauber war. Ich kann mich nicht erinnern, ob es ein Bildschirm mit niedriger oder hoher Dichte oder sogar eine ältere Version von Android war (2.x vielleicht).4dp
Strichbreite-8dp
für die Positionierung verwenden soll?-5dp
alles ist, was mit einem Breitenwert von benötigt wird4pd
. Es musste einfach etwas größer sein, um die Ungenauigkeit des Float-Werts zu überwinden.Die aktuell akzeptierte Antwort funktioniert nicht. Durch Anti-Aliasing werden auf der linken und rechten Seite der Ansicht dünne vertikale Ränder erstellt.
Diese Version funktioniert perfekt. Außerdem können Sie die Rahmenbreiten unabhängig voneinander festlegen und bei Bedarf auch Rahmen auf der linken / rechten Seite hinzufügen. Der einzige Nachteil ist, dass es KEINE Transparenz unterstützt.
Erstellen Sie eine XML-Zeichnungsdatei
/res/drawable/top_bottom_borders.xml
mit dem folgenden Code und weisen Sie sie als Hintergrundeigenschaft von TextView zu.Getestet auf Android KitKat durch Marshmallow
quelle
Also wollte ich etwas anderes machen: NUR einen Rand am unteren Rand, um einen ListView-Teiler zu simulieren. Ich habe die Antwort von Piet Delport geändert und Folgendes erhalten:
Beachten Sie, dass Sie px anstelle von dp verwenden, um genau einen 1-Pixel-Teiler zu erhalten (bei einigen Telefon-DPIs verschwindet eine 1-dp-Zeile).
quelle
"@color/background_trans_light"
?Genau wie @Nic Hubbard sagte, gibt es eine sehr einfache Möglichkeit, eine Grenzlinie hinzuzufügen.
Sie können die Höhe und Hintergrundfarbe nach Belieben ändern.
quelle
Meine Antworten basieren auf der @ Emile-Version, aber ich verwende transparente Farben anstelle von Volltonfarben.
In diesem Beispiel wird ein unterer 2DP-Rand gezeichnet.
@ color / bgcolor ist die Farbe des Hintergrunds, auf dem Sie Ihre Ansicht mit Rand zeichnen.
Wenn Sie die Position des Rahmens ändern möchten, ändern Sie den Versatz mit einem der folgenden Punkte:
oder kombinieren Sie sie, um 2 oder mehr Ränder zu haben:
quelle
Sie können die Ansicht auch in ein FrameLayout einschließen und dann die Hintergrundfarbe und den Abstand des Rahmens auf die gewünschten Werte einstellen. Die Textansicht hat jedoch standardmäßig einen "transparenten" Hintergrund, sodass Sie auch die Hintergrundfarbe der Textansicht ändern müssen.
quelle
Warum nicht einfach eine 1dp-Ansicht mit einer Hintergrundfarbe erstellen? Dann kann es einfach platziert werden, wo Sie wollen.
quelle
Nur um meine Lösung zur Liste hinzuzufügen ..
Ich wollte einen halbtransparenten unteren Rand, der über die ursprüngliche Form hinausragt (der halbtransparente Rand befand sich also außerhalb des übergeordneten Rechtecks).
Welches gibt mir;
quelle
Um dies zu ändern:
Ich bevorzuge diesen Ansatz in "drawable / top_bottom_border.xml":
Dadurch werden nur die Ränder erstellt, kein Rechteck, das angezeigt wird, wenn Ihr Hintergrund eine Farbe hat.
quelle
Erstellen Sie zunächst eine XML-Datei mit dem unten gezeigten Inhalt, benennen Sie sie border.xml und legen Sie sie im Layoutordner im Verzeichnis res ab
Danach im Code verwenden
Dadurch wird oben und unten in der Textansicht eine schwarze Linie angezeigt.
quelle
Schreiben Sie den folgenden Code auf
quelle
Hier ist ein Weg, um dies zu erreichen.
Erster Punkt für Strich und zweiter für festen Hintergrund. Linke und rechte Grenze verstecken.
quelle
Der einfachste Weg, Ränder hinzuzufügen, um die Ränder mit einzufügen
InsetDrawable
, zeigt nur den oberen Rand:quelle
Datei zu res / drawable hinzufügen
In Link zu dieser Datei auf Hintergrund Immobilien
quelle
Versuchen Sie, das Bild mit einem linearen Layout zu versehen, und stellen Sie den Hintergrund auf die gewünschte Rahmenfarbe um den Text ein. Stellen Sie dann die Auffüllung in der Textansicht auf die gewünschte Dicke für Ihren Rand ein.
quelle
Sie können auch einen 9-Pfad verwenden, um Ihre Arbeit zu erledigen. Erstellen Sie es so, dass farbige Pixel nicht in der Höhe multiplizieren, sondern nur das transparente Pixel.
quelle
quelle
Fügen Sie einfach Ansichten oben und unten am hinzu
View
quelle
quelle
Fügen Sie diese Textansicht einfach unter dem Text hinzu, in dem Sie den Rahmen hinzufügen möchten
quelle
Nur um die Antworten von @phreakhead und user1051892 durchzusetzen
<item android:bottom|android:left|android:right|android:top>
, müssen die Antworten, falls sie negativ sind, größer sein als<stroke android:width>
. Wenn nicht, wird das Bild des Gegenstands mit dem Bild des Strichs gemischt, und Sie denken möglicherweise, dass diese Werte nicht funktionieren.quelle