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