Opcja 1: kształt rysowany
Jest to najprostsza opcja, jeśli chcesz obramować układ lub widok, w którym możesz ustawić tło. Utwórz plik XML w drawable
folderze, który wygląda mniej więcej tak:
<?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>
Możesz usunąć, solid
jeśli nie chcesz wypełnienia. Zestaw background="@drawable/your_shape_drawable"
w twoim układzie / widoku.
Opcja 2: Widok tła
Oto mała sztuczka, której użyłem w RelativeLayout
. Zasadniczo masz czarny kwadrat pod widokiem, który chcesz nadać ramce, a następnie nadaj temu widokowi trochę wypełnienia (nie marginesu!), Aby czarny kwadrat był widoczny na krawędziach.
Oczywiście działa to poprawnie tylko wtedy, gdy widok nie ma żadnych przezroczystych obszarów. Jeśli tak, polecam napisać niestandardowy, BorderView
który tylko rysuje granicę - powinien to być tylko kilkadziesiąt linii kodu.
<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/..." />
Jeśli zastanawiasz się, to czyni pracę z adjustViewBounds=true
. Jednak to nie działa, jeśli chcesz mieć tło w całości RelativeLayout
, ponieważ istnieje błąd, który powstrzymuje Cię od wypełnienia RelativeLayout
znakiem View
. W takim przypadku polecam Shape
wyciągnąć.
Opcja 3: 9 łatek
Ostatnią opcją jest skorzystanie z 9-patcha, który można wyciągnąć w następujący sposób:
Możesz go użyć w dowolnym widoku, w którym możesz ustawić android:background="@drawable/..."
. I tak, to musi być 6x6 - próbowałem 5x5 i to nie działało.
Wadą tej metody jest to, że nie możesz bardzo łatwo zmieniać kolorów, ale jeśli chcesz fantazyjne obramowania (np. Tylko obramowanie u góry iu dołu, jak w tym pytaniu), możesz nie być w stanie zrobić ich z Shape
rysowalnym , co nie jest zbyt potężne.
Opcja 4: Dodatkowe widoki
Zapomniałem wspomnieć o tej naprawdę prostej opcji, jeśli chcesz tylko ramki powyżej i poniżej widoku. Możesz umieścić swój widok w pionie LinearLayout
(jeśli jeszcze nie jest), a następnie dodać puste View
s powyżej i poniżej tak:
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>