Creare un layout lineare

Prova Compose
Jetpack Compose è il toolkit UI consigliato per Android. Scopri come lavorare con i layout in Compose.

LinearLayout è un gruppo di oggetti View che allinea tutti gli elementi secondari in un'unica direzione, verticale o orizzontale. Puoi specificare la direzione del layout con l' android:orientation attributo.

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

Tutti gli elementi secondari di un LinearLayout sono impilati uno dopo l'altro, quindi un elenco verticale ha un solo elemento secondario per riga, indipendentemente dalla larghezza. Un elenco orizzontale ha un'altezza di una sola riga, che è l'altezza dell'elemento secondario più alto, più il padding. Un LinearLayout rispetta i margini tra gli elementi secondari e l'allineamento (a destra, al centro o a sinistra) di ogni elemento secondario.

Peso del layout

LinearLayout supporta anche l'assegnazione di un peso ai singoli elementi secondari con l' android:layout_weight attributo. Questo attributo assegna un valore di "importanza" a una visualizzazione in termini di spazio occupato sullo schermo. Un valore di peso maggiore consente di espandere la visualizzazione per riempire lo spazio rimanente nella vista genitore. Le visualizzazioni secondarie possono specificare un valore di peso e lo spazio rimanente nel gruppo di oggetti View viene assegnato proporzionalmente agli elementi secondari, in base al peso dichiarato. Il peso predefinito è zero.

Distribuzione uguale

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

Distribuzione non uguale

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

  • Supponiamo che tu abbia tre campi di testo: due con un valore di peso pari a 1 e un terzo con il valore di peso predefinito pari a 0. Il terzo campo di testo, con il valore di peso pari a 0, occupa solo l'area richiesta dal suo contenuto. Gli altri due campi di testo, con il valore di peso pari a 1, si espandono in modo uniforme per riempire lo spazio rimanente dopo aver misurato i contenuti di tutti e tre i campi.
  • Se invece hai tre campi di testo in cui due hanno un valore di peso pari a 1 e il terzo ha un peso pari a 2, lo spazio rimanente dopo aver misurato i contenuti di tutti e tre i campi viene allocato come segue: metà al campo con il valore di peso pari a 2 e metà divisa equamente tra i campi con il valore di peso pari a 1.

La figura e lo snippet di codice seguenti mostrano come potrebbero funzionare i pesi del layout in un'attività "Invia messaggio". Il campo A , la riga Oggetto e il pulsante Invia occupano solo l'altezza di cui hanno bisogno. L'area del messaggio occupa il resto dell'altezza dell'attività.

Un'immagine che mostra tre EditText e un pulsante in un LinearLayout orientato verticalmente
Figura 2. Tre campi di testo e un pulsante in un orientato verticalmente LinearLayout.
<?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 i dettagli sugli attributi disponibili per ogni vista bambino di a LinearLayout, consulta LinearLayout.LayoutParams.