RelativeLayout
to grupa widoków, która wyświetla widoki podrzędne w pozycjach względnych. Położenie każdego widoku można określić w odniesieniu do elementów równorzędnych (np. po lewej stronie lub pod innym widokiem) lub w pozycji względem nadrzędnego obszaru RelativeLayout
(np. wyrównać do dołu, do lewej lub do środka).
Uwaga: aby uzyskać lepszą wydajność i dostęp do narzędzi, lepiej skompiluj układ przy użyciu ConstraintLayout.
RelativeLayout
to bardzo zaawansowane narzędzie do projektowania interfejsu użytkownika, ponieważ pozwala wyeliminować zagnieżdżone grupy widoków i utrzymać płaską hierarchię układu, co zwiększa wydajność. Jeśli korzystasz z kilku zagnieżdżonych grup LinearLayout
, możesz spróbować zastąpić je pojedynczą grupą RelativeLayout
.
Pozycjonowanie widoków
RelativeLayout
umożliwia widokom podrzędnym określanie swojej pozycji względem widoku nadrzędnego lub siebie nawzajem (określanych za pomocą identyfikatora). Możesz więc wyrównać 2 elementy według prawej krawędzi,
ustawić jeden pod drugim, wyśrodkować na ekranie, wyśrodkować do lewej itd. Domyślnie wszystkie widoki podrzędne są rysowane w lewym górnym rogu układu, więc musisz określić położenie każdego widoku za pomocą różnych właściwości układu dostępnych w elemencie RelativeLayout.LayoutParams
.
Do wielu właściwości układu dostępnych w widoku RelativeLayout
należą:
android:layout_alignParentTop
- Jeśli wybierzesz
"true"
, górna krawędź tego widoku będzie odpowiadać górnej krawędzi okna nadrzędnego. android:layout_centerVertical
- Jeśli element
"true"
jest wyśrodkowany, element podrzędny jest wyśrodkowany w pionie. android:layout_below
- Umieszcza górną krawędź tego widoku pod widokiem określonym za pomocą identyfikatora zasobu.
android:layout_toRightOf
- Umieszcza lewą krawędź tego widoku na prawo od widoku określonego za pomocą identyfikatora zasobu.
To tylko kilka przykładów. Dokumentację wszystkich atrybutów układu znajdziesz na RelativeLayout.LayoutParams
.
Wartością każdej właściwości szablonu jest wartość logiczna, która włącza pozycję układu względem elementu nadrzędnego (RelativeLayout
), lub identyfikator odwołujący się do innego widoku w układzie, względem którego należy umieścić ten widok.
W układzie XML zależności względem innych widoków w układzie można zadeklarować w dowolnej kolejności. Możesz np. zadeklarować, że „view1” jest umieszczony poniżej wartości „view2”, nawet jeśli „view2” jest ostatnim zadeklarowanym w hierarchii. Poniższy przykład ilustruje taki scenariusz.
Przykład
Wyróżnione są wszystkie atrybuty, które kontrolują względną pozycję każdego widoku.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp" > <EditText android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/reminder" /> <Spinner android:id="@+id/dates" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_below="@id/name" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/times" /> <Spinner android:id="@id/times" android:layout_width="96dp" android:layout_height="wrap_content" android:layout_below="@id/name" android:layout_alignParentRight="true" /> <Button android:layout_width="96dp" android:layout_height="wrap_content" android:layout_below="@id/times" android:layout_alignParentRight="true" android:text="@string/done" /> </RelativeLayout>
Szczegółowe informacje o wszystkich atrybutach układu dostępnych dla każdego widoku podrzędnego w RelativeLayout
znajdziesz tutaj: RelativeLayout.LayoutParams
.