Risorsa layout

Una risorsa di layout definisce l'architettura della UI in un elemento Activity o in un componente di una UI.

percorso file:
res/layout/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilata:
Puntatore di risorsa a una risorsa View (o una sottoclasse)
riferimento risorsa:
In Java: R.layout.filename
In XML: @[package:]layout/filename
:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

Nota: l'elemento principale può essere ViewGroup, View o <merge>, ma può esserci un solo elemento radice e deve contenere l'attributo xmlns:android con lo spazio dei nomi android, come mostrato nell'esempio di sintassi precedente.

:
<ViewGroup>
Un contenitore per altri elementi View. Esistono molti tipi diversi di oggetti ViewGroup e ognuno consente di specificare il layout degli elementi secondari in modi diversi. Diversi tipi di oggetti ViewGroup includono LinearLayout, RelativeLayout e FrameLayout.

Non dare per scontato che qualsiasi derivazione di ViewGroup accetti visualizzazioni nidificate. Alcuni gruppi di visualizzazioni sono implementazioni della classe AdapterView, che determina i gruppi di visualizzazioni solo da un Adapter.

Attributi:

android:id
ID risorsa: Un nome di risorsa univoco per l'elemento, che puoi utilizzare per ottenere un riferimento a ViewGroup dalla tua applicazione. Per ulteriori informazioni, consulta la sezione Valore per android:id.
android:layout_height
Dimensione o parola chiave. Obbligatorio. L'altezza del gruppo, sotto forma di valore di dimensione (o risorsa di dimensione) o parola chiave ("match_parent" o "wrap_content"). Per ulteriori informazioni, consulta la sezione Valori per android:layout_height e android:layout_width.
android:layout_width
Dimensione o parola chiave. Obbligatorio. La larghezza del gruppo, come valore di dimensione (o risorsa di dimensione) o parola chiave ("match_parent" o "wrap_content"). Per ulteriori informazioni, consulta la sezione Valori per android:layout_height e android:layout_width.

La classe di base ViewGroup supporta più attributi e molti altri sono supportati da ogni implementazione di ViewGroup. Per un riferimento di tutti gli attributi disponibili, consulta la documentazione di riferimento corrispondente per la classe ViewGroup, ad esempio gli attributi XML di LinearLayout.

<View>
Un singolo componente dell'interfaccia utente, generalmente chiamato widget. Diversi tipi di oggetti View includono TextView, Button e CheckBox.

Attributi:

android:id
ID risorsa: Un nome risorsa univoco per l'elemento, che puoi utilizzare per ottenere un riferimento a View dalla tua applicazione. Per ulteriori informazioni, consulta la sezione Valore per android:id.
android:layout_height
Dimensione o parola chiave. Obbligatorio. L'altezza dell'elemento, sotto forma di valore di dimensione (o risorsa di dimensione) o parola chiave ("match_parent" o "wrap_content"). Per ulteriori informazioni, consulta la sezione Valori per android:layout_height e android:layout_width.
android:layout_width
Dimensione o parola chiave. Obbligatorio. La larghezza dell'elemento, come valore di dimensione (o risorsa di dimensione) o parola chiave ("match_parent" o "wrap_content"). Per ulteriori informazioni, consulta la sezione Valori per android:layout_height e android:layout_width.

La classe di base View supporta più attributi e molti altri sono supportati da ogni implementazione di View. Per ulteriori informazioni, consulta la sezione Layout. Per un riferimento di tutti gli attributi disponibili, consulta la documentazione di riferimento corrispondente, ad esempio gli attributi XML di TextView.

<requestFocus>
Qualsiasi elemento che rappresenti un oggetto View può includere questo elemento vuoto, in modo che l'elemento principale sia impostato come attivo sullo schermo. Puoi avere solo uno di questi elementi per file.
<include>
In questo layout è incluso un file di layout.

Attributi:

layout
Risorsa layout. Obbligatorio. Riferimento a una risorsa di layout.
android:id
ID risorsa: Esegue l'override dell'ID assegnato alla vista principale nel layout incluso.
android:layout_height
Dimensione o parola chiave. Esegue l'override dell'altezza assegnata alla vista principale nel layout incluso. In vigore solo se viene dichiarato anche android:layout_width.
android:layout_width
Dimensione o parola chiave. Esegue l'override della larghezza assegnata alla visualizzazione principale nel layout incluso. In vigore solo se viene dichiarato anche android:layout_height.

In <include> puoi includere qualsiasi altro attributo di layout supportato dall'elemento principale nel layout incluso e sostituire quelli definiti nell'elemento principale.

Attenzione: se vuoi sostituire gli attributi di layout utilizzando il tag <include>, devi sostituire entrambi gli attributi android:layout_height e android:layout_width affinché gli altri attributi di layout abbiano effetto.

Un altro modo per includere un layout è utilizzare ViewStub: una visualizzazione leggera che non occupa spazio per il layout fino a quando non la gonfi esplicitamente. Quando lo fai, include un file di layout definito dal suo attributo android:layout. Per maggiori informazioni sull'utilizzo di ViewStub, leggi la pagina Caricare visualizzazioni on demand.

<merge>
Un elemento principale alternativo che non è tracciato nella gerarchia del layout. L'utilizzo di questo elemento come elemento principale è utile quando sai che questo layout è posizionato in un layout che contiene già l'elemento View principale appropriato per contenere gli elementi secondari dell'elemento <merge>.

Ciò è particolarmente utile se prevedi di includere questo layout in un altro file di layout utilizzando <include> e questo layout non richiede un contenitore ViewGroup diverso. Per ulteriori informazioni sull'unione dei layout, consulta Riutilizzare i layout con <include>.

Valore per android:id

Per il valore ID, in genere utilizzi il seguente formato di sintassi: "@+id/name", come mostrato nell'esempio seguente. Il simbolo più, +, indica che si tratta di un nuovo ID risorsa e che lo strumento aapt crea un nuovo numero intero di risorsa nella classe R.java, se non esiste già.

<TextView android:id="@+id/nameTextbox"/>

Il nome nameTextbox è ora un ID risorsa associato a questo elemento. Puoi quindi fare riferimento all'elemento TextView a cui è associato l'ID in Java:

Kotlin

val textView: TextView? = findViewById(R.id.nameTextbox)

Java

TextView textView = findViewById(R.id.nameTextbox);

Questo codice restituisce l'oggetto TextView.

Tuttavia, se hai già definito una risorsa ID e non è già utilizzata, puoi applicare questo ID a un elemento View escludendo il simbolo più nel valore android:id.

Valori per android:layout_height e android:layout_width

I valori di altezza e larghezza sono espressi utilizzando una qualsiasi delle unità di dimensione supportate da Android (px, dp, sp, pt, in, mm) o con le seguenti parole chiave:

ValoreDescrizione
match_parent Imposta la dimensione in modo che corrisponda a quella dell'elemento principale. Aggiunta nel livello API 8 per deprecare fill_parent.
wrap_content Consente di impostare la dimensione solo sulla dimensione richiesta per adattarsi ai contenuti di questo elemento.

Elementi delle viste personalizzate

Puoi creare elementi View e ViewGroup personalizzati e applicarli al tuo layout come un elemento di layout standard. Puoi anche specificare gli attributi supportati nell'elemento XML. Per ulteriori informazioni, consulta Creare componenti delle viste personalizzate.

esempio:
File XML salvato in res/layout/main_activity.xml:
<?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:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

Questo codice dell'applicazione carica il layout per un elemento Activity nel metodo onCreate():

Kotlin

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

Java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
vedi anche: