Układ względny

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak korzystać z układów w funkcji Utwórz

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.