Ressource de mise en page

Une ressource de mise en page définit l'architecture de l'UI dans un objet Activity ou un composant d'une UI.

Emplacement du fichier :
res/layout/filename.xml
Le nom de fichier est utilisé comme ID de ressource.
Type de données de la ressource compilée :
Pointeur vers une ressource (ou sous-classe) View.
Référence de la ressource :
En Java : R.layout.filename
En XML : @[package:]layout/filename
Syntaxe :
<?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>

Remarque : L'élément racine peut être un élément ViewGroup, View ou <merge>, mais il ne peut y avoir qu'un seul élément racine, qui doit contenir l'attribut xmlns:android avec l'espace de noms android, comme indiqué dans l'exemple de syntaxe précédent.

Éléments :
<ViewGroup>
Conteneur pour d'autres éléments View. Il existe de nombreux types d'objets ViewGroup différents, et chacun vous permet de spécifier la mise en page des éléments enfants de différentes manières. Les différents types d'objets ViewGroup incluent LinearLayout, RelativeLayout et FrameLayout.

Ne partez pas du principe que toute dérivation de ViewGroup accepte les vues imbriquées. Certains groupes de vues sont des implémentations de la classe AdapterView, qui détermine ses enfants uniquement à partir d'un Adapter.

Attributs :

android:id
ID de ressource. Nom de ressource unique de l'élément, que vous pouvez utiliser pour obtenir une référence à la propriété ViewGroup à partir de votre application. Pour en savoir plus, consultez la section Valeur pour android:id.
android:layout_height
Dimension ou mot clé. Obligatoire. Hauteur du groupe, en tant que valeur de dimension (ou ressource de dimension) ou mot clé ("match_parent" ou "wrap_content"). Pour en savoir plus, consultez la section Valeurs pour android:layout_height et android:layout_width.
android:layout_width
Dimension ou mot clé. Obligatoire. Largeur du groupe, en tant que valeur de dimension (ou ressource de dimension) ou mot clé ("match_parent" ou "wrap_content"). Pour en savoir plus, consultez la section Valeurs pour android:layout_height et android:layout_width.

La classe de base ViewGroup accepte davantage d'attributs, et de nombreux autres sont compatibles avec chaque implémentation de ViewGroup. Pour connaître tous les attributs disponibles, consultez la documentation de référence correspondante pour la classe ViewGroup (par exemple, les attributs XML LinearLayout).

<View>
Composant d'UI individuel, généralement appelé widget. Les différents types d'objets View incluent TextView, Button et CheckBox.

Attributs :

android:id
ID de ressource. Nom de ressource unique de l'élément, que vous pouvez utiliser pour obtenir une référence à la propriété View à partir de votre application. Pour en savoir plus, consultez la section Valeur pour android:id.
android:layout_height
Dimension ou mot clé. Obligatoire. Hauteur de l'élément, en tant que valeur de dimension (ou ressource de dimension) ou mot clé ("match_parent" ou "wrap_content"). Pour en savoir plus, consultez la section Valeurs pour android:layout_height et android:layout_width.
android:layout_width
Dimension ou mot clé. Obligatoire. Largeur de l'élément, en tant que valeur de dimension (ou ressource de dimension) ou mot clé ("match_parent" ou "wrap_content"). Pour en savoir plus, consultez la section Valeurs pour android:layout_height et android:layout_width.

La classe de base View accepte davantage d'attributs, et de nombreux autres sont compatibles avec chaque implémentation de View. Pour en savoir plus, consultez Mises en page. Pour connaître tous les attributs disponibles, consultez la documentation de référence correspondante (par exemple, les attributs XML TextView).

<requestFocus>
Tout élément représentant un objet View peut inclure cet élément vide, ce qui permet à son parent de se concentrer initialement sur l'écran. Vous ne pouvez avoir qu'un seul de ces éléments par fichier.
<include>
Inclut un fichier de mise en page dans cette mise en page.

Attributs :

layout
Ressource de mise en page. Obligatoire. Référence à une ressource de mise en page.
android:id
ID de ressource. Remplace l'ID attribué à la vue racine dans la mise en page incluse.
android:layout_height
Dimension ou mot clé. Remplace la hauteur attribuée à la vue racine dans la mise en page incluse. Ceci est uniquement efficace si android:layout_width est également déclaré.
android:layout_width
Dimension ou mot clé. Remplace la largeur attribuée à la vue racine dans la mise en page incluse. Ceci est uniquement efficace si android:layout_height est également déclaré.

Vous pouvez inclure dans la propriété <include> tout autre attribut de mise en page compatible avec l'élément racine. Il remplacera alors ceux définis dans l'élément racine.

Attention : Si vous souhaitez remplacer les attributs de mise en page à l'aide de la balise <include>, vous devez remplacer android:layout_height et android:layout_width afin qu'ils prennent effet.

Une autre façon d'inclure une mise en page consiste à utiliser ViewStub : une vue légère qui ne consomme aucun espace de mise en page jusqu'à tant que vous ne la gonflez pas explicitement. Elle inclut alors un fichier de mise en page défini par son attribut android:layout. Pour en savoir plus sur l'utilisation de ViewStub, consultez la page Charger des vues à la demande.

<merge>
Autre élément racine qui ne figure pas dans la hiérarchie de la mise en page. L'utiliser comme élément racine est utile si vous savez que cette mise en page sera placée dans une mise en page contenant déjà l'objet View parent approprié pour contenir les enfants de l'élément <merge>.

Ceci est particulièrement utile lorsque vous prévoyez d'inclure cette mise en page dans un autre fichier de mise en page à l'aide de <include> et que cette mise en page ne nécessite pas un autre conteneur ViewGroup. Pour en savoir plus, consultez la section Réutiliser des mises en page avec <include>.

Valeur pour android:id

Pour la valeur de l'ID, vous devez généralement utiliser la syntaxe suivante : "@+id/name", comme indiqué dans l'exemple suivant. Le symbole Plus (+) indique qu'il s'agit d'un nouvel ID de ressource. Si ce n'est pas déjà fait, l'outil aapt crée un entier pour la ressource dans la classe R.java.

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

Le nom nameTextbox est désormais un ID de ressource associé à cet élément. Vous pouvez ensuite faire référence au TextView auquel l'ID est associé en Java :

Kotlin

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

Java

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

Ce code renvoie l'objet TextView.

Toutefois, si vous avez déjà défini un ID de ressource et qu'il n'est pas déjà utilisé, vous pouvez appliquer cet ID à un élément View en excluant le symbole plus dans la valeur android:id.

Valeur pour android:layout_height et android:layout_width

Les valeurs de hauteur et de largeur sont exprimées à l'aide de l'une des unités de dimension acceptées par Android (px, dp, sp, pt, in, mm) ou avec les mots clés suivants :

ValeurDescription
match_parent Définit la dimension de sorte qu'elle corresponde à celle de l'élément parent. Ajouté au niveau d'API 8 pour rendre fill_parent obsolète.
wrap_content Définit la dimension uniquement sur la taille requise pour s'adapter au contenu de cet élément.

Éléments de vue personnalisée

Vous pouvez créer des éléments View et ViewGroup personnalisés, et les appliquer à votre mise en page de la même manière qu'un élément de mise en page standard. Vous pouvez également spécifier les attributs acceptés dans l'élément XML. Pour en savoir plus, consultez la section Créer des composants de vue personnalisée.

Exemple :
Fichier XML enregistré sous 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>

Ce code d'application charge la mise en page pour une Activity dans la méthode 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);
}
Voir aussi :