Layout relativo

Prova il metodo Scrivi
Jetpack Compose è il toolkit consigliato per la UI per Android. Scopri come utilizzare i layout in Compose.

RelativeLayout è un gruppo di visualizzazioni che mostra le visualizzazioni secondarie in relazione posizioni. La posizione di ogni vista può essere specificata in relazione a elementi di pari livello (ad esempio, a sinistra o sotto un'altra vista) o in posizioni relative all'area RelativeLayout principale (ad esempio allineata in basso, a sinistra o al centro).

Nota: Per migliorare le prestazioni e il supporto degli strumenti, devi invece creare il tuo layout con ConstraintLayout.

RelativeLayout è un'utilità molto potente per progettare un'interfaccia utente perché è possibile eliminare i gruppi di viste nidificate e mantenere piatta la gerarchia del layout, migliorando le prestazioni dei dispositivi. Se ti ritrovi a utilizzare più gruppi LinearLayout nidificati, puoi sostituirli con un singolo elemento RelativeLayout.

Viste di posizionamento

RelativeLayout consente alle viste secondarie di specificare la propria posizione rispetto vista principale o tra di loro (specificati dall'ID). Quindi puoi allineare due elementi tramite bordo destro una sotto l'altra, centrate sullo schermo, centrate a sinistra e così via. Per impostazione predefinita, Le viste sono tracciate in alto a sinistra del layout, quindi devi definire la posizione di ogni vista utilizzando le varie proprietà di layout disponibili su RelativeLayout.LayoutParams.

Alcune delle molte proprietà di layout disponibili per le visualizzazioni in un RelativeLayout include:

android:layout_alignParentTop
Se "true", il bordo superiore di questa visualizzazione corrisponde al bordo superiore dell'immagine principale.
android:layout_centerVertical
Se "true", centra questo asset secondario verticalmente all'interno dell'elemento principale.
android:layout_below
Posiziona il bordo superiore di questa vista sotto quella specificata con un ID risorsa.
android:layout_toRightOf
Posiziona il bordo sinistro di questa vista a destra di quella specificata con un ID risorsa.

Questi sono solo alcuni esempi. Tutti gli attributi di layout sono documentati in RelativeLayout.LayoutParams.

Il valore per ogni proprietà di layout è un valore booleano a attivare una posizione del layout relativa all'elemento RelativeLayout principale o un ID che fa riferimento a un'altra vista nel layout in base alla quale deve essere posizionata.

Nel layout XML, le dipendenze rispetto ad altre visualizzazioni nel layout possono essere dichiarate in qualsiasi ordine. Ad esempio, puoi dichiarare che "view1" essere posizionata sotto "view2" anche se "view2" è l'ultimo dichiarata nella gerarchia. L'esempio seguente illustra questo scenario.

Esempio

Viene enfatizzato ogni attributo che controlla la posizione relativa di ogni vista.

<?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>

Per dettagli su tutti gli attributi di layout disponibili per ogni vista secondaria di un RelativeLayout, consulta RelativeLayout.LayoutParams.