Option 1: Zeichnungsfähige Form
Dies ist die einfachste Option, wenn Sie einen Rahmen um ein Layout oder eine Ansicht wünschen, in dem Sie den Hintergrund festlegen können. Erstellen Sie eine XML-Datei im Verzeichnis drawable
der in etwa so aussieht:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#8fff93" />
<stroke
android:width="1px"
android:color="#000" />
</shape>
Sie können die solid
wenn Sie keine Füllung wünschen. Der Satz background="@drawable/your_shape_drawable"
auf Ihr Layout/Ihre Ansicht.
Option 2: Hintergrundansicht
Hier ist ein kleiner Trick, den ich in einem RelativeLayout
. Im Grunde genommen haben Sie ein schwarzes Quadrat unter der Ansicht, der Sie einen Rahmen geben wollen, und dann geben Sie dieser Ansicht etwas Polsterung (nicht Rand!), so dass das schwarze Quadrat an den Rändern durchscheint.
Das funktioniert natürlich nur, wenn die Ansicht keine transparenten Bereiche enthält. Wenn dies der Fall ist, empfehle ich Ihnen, eine eigene BorderView
die nur den Rand zeichnet - es sollten nur ein paar Dutzend Zeilen Code sein.
<View
android:id="@+id/border"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image"
android:layout_alignLeft="@+id/image"
android:layout_alignRight="@+id/image"
android:layout_alignTop="@+id/main_image"
android:background="#000" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_...
android:padding="1px"
android:src="@drawable/..." />
Falls Sie sich wundern, es tut Arbeit mit adjustViewBounds=true
. Es funktioniert jedoch nicht, wenn Sie einen Hintergrund in einem ganzen Land haben wollen. RelativeLayout
weil es einen Fehler gibt, der das Ausfüllen eines RelativeLayout
mit einer View
. In diesem Fall empfehle ich die Shape
auslosbar.
Option 3: 9-Fleck
Eine letzte Möglichkeit ist die Verwendung einer 9-Felder-Ziehscheibe wie dieser:
![]()
Sie können es in jeder Ansicht verwenden, in der Sie die android:background="@drawable/..."
. Und ja, es muss 6x6 sein - ich habe es mit 5x5 versucht und es hat nicht funktioniert.
Der Nachteil dieser Methode ist, dass man die Farben nicht so einfach ändern kann, aber wenn man ausgefallene Ränder haben möchte (z.B. nur einen Rand oben und unten, wie in dieser Frage), dann kann man das nicht mit der Shape
zeichenbar, was nicht sehr leistungsfähig 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 in eine vertikale LinearLayout
(falls nicht bereits vorhanden) und fügen Sie dann leere View
s über und unter ihm so:
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>