Creare un layout lineare

Prova la modalità Scrivi
Jetpack Compose è il toolkit dell'interfaccia utente consigliato per Android. Scopri come utilizzare i layout in Compose.

LinearLayout è un gruppo di visualizzazioni che allinea tutti gli elementi secondari in una sola direzione, verticalmente o orizzontalmente. Puoi specificare la direzione del layout con l'attributo android:orientation.

Un'immagine che mostra un layout diviso in tre sezioni verticali
Figura 1. Un elemento LinearLayout con tre elementi secondari orientati orizzontalmente.

Tutti gli elementi secondari di LinearLayout vengono impilati uno dopo l'altro, pertanto un elenco verticale ha un solo elemento secondario per riga, indipendentemente dalla sua larghezza. Un elenco orizzontale ha l'altezza di una sola riga e corrisponde all'altezza dell'elemento secondario più alto, più la spaziatura interna. Un LinearLayout rispetta i margini tra i bambini e la gravità (allineamento a destra, centro o sinistra) di ciascuno.

Ponderazione layout

LinearLayout supporta anche l'assegnazione di un peso a singoli elementi figlio con l'attributo android:layout_weight. Questo attributo assegna un valore di "importanza" a una visualizzazione in termini di quanto spazio occupa sullo schermo. Con un valore maggiore, la ponderazione si espande per riempire lo spazio rimanente nella vista principale. Le viste secondarie possono specificare un valore di ponderazione e l'eventuale spazio rimanente nel gruppo di visualizzazioni viene assegnato in modo proporzionale ai publisher secondari, in base alla ponderazione dichiarata. La ponderazione predefinita è zero.

Uguale distribuzione

Per creare un layout lineare in cui ogni figlio utilizza la stessa quantità di spazio sullo schermo, imposta il android:layout_height di ogni vista su "0dp" per un layout verticale o su android:layout_width per ogni vista su "0dp" per un layout orizzontale. Poi imposta il valore android:layout_weight di ogni vista su "1".

Distribuzione non uniforme

Puoi anche creare layout lineari in cui gli elementi secondari utilizzano quantità diverse di spazio sullo schermo. Considera i seguenti esempi:

  • Supponi di avere tre campi di testo: due con un valore di ponderazione pari a 1 e un terzo con il valore di ponderazione predefinito di 0. Il terzo campo di testo, con valore di ponderazione pari a 0, occupa solo l'area richiesta dal suo contenuto. Gli altri due campi di testo, con valore di ponderazione pari a 1, si espandono equamente per riempire lo spazio rimanente dopo la misurazione dei contenuti di tutti e tre i campi.
  • Se invece hai tre campi di testo in cui due hanno un valore ponderato pari a 1 e il terzo ha una ponderazione pari a 2, lo spazio rimanente dopo che sono stati misurati i contenuti di tutti e tre i campi viene allocato come segue: metà al campo con valore ponderato pari a 2 e metà divisa equamente tra i campi con ponderazione pari a 1.

La figura e lo snippet di codice seguenti mostrano come potrebbero funzionare le ponderazioni del layout in un'attività "Invia messaggio". I campi A, la riga Oggetto e il pulsante Invia occupano solo l'altezza necessaria. L'area del messaggio occupa il resto dell'altezza dell'attività.

Un'immagine che mostra tre elementi EditText e un pulsante in un layout LinearLayout orientato verticalmente
Figura 2. Tre campi di testo e un pulsante in un elemento LinearLayout orientato verticalmente.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:text="@string/send" />
</LinearLayout>

Per maggiori dettagli sugli attributi disponibili per ogni vista secondaria di un elemento LinearLayout, consulta LinearLayout.LayoutParams.