Une autre option de mise en page courante est LinearLayout, qui organise les vues enfant dans une seule colonne ou une seule rangée, en fonction de l'orientation spécifiée. L'orientation par défaut (si elle n'est pas spécifiée) est verticale, ce qui aligne les vues dans une seule colonne.
LinearLayout possède une fonctionnalité clé non proposée dans RelativeLayout: l'attribut weight. Nous pouvons spécifier un paramètre layout_weight lors de la définition d'une vue pour autoriser la taille dynamique de la vue en fonction de l'espace disponible. Les options incluent une vue remplissant tout l'espace restant (si une vue a un poids plus élevé), ayant plusieurs vues dans l'espace donné (si tous ont le même poids), ou espaçant proportionnellement les vues par leur poids.
Nous allons créer un LinearLayout avec trois vues EditText pour montrer comment l'attribut weight peut être utilisé. Pour cet exemple, nous allons utiliser trois vues EditText: une pour entrer un paramètre d'adresse, une autre pour entrer un sujet et la troisième pour entrer un message.
Les vues À et Sujet seront chacune une ligne, l'espace restant étant donné à la vue des messages.
Se préparer
Créez un nouveau projet et appelez-le LinearLayout. Nous allons remplacer le défaut
RelativeLayout créé dans activity_main.xml avec un LinearLayout.
Comment faire...
1. Ouvrez le fichier res / layout / activity_main.xml et remplacez-le comme suit:
2. Exécutez le code ou affichez la disposition dans l'onglet Conception.
Comment ça marche...
Lorsque vous utilisez l'orientation verticale avec LinearLayout, les vues enfants sont créées dans une seule colonne (empilées les unes sur les autres). Les deux premières vues utilisent l'attribut android: layout_haut = "wrap_content", en leur donnant une seule ligne chacune. editTextMessage utilise les éléments suivants pour spécifier la hauteur:
android: layout_height = "0dp"
android: layout_weight = "1"
Lorsque vous utilisez le LinearLayout, il indique à Android de calculer la hauteur en fonction du poids. Un poids de 0 (valeur par défaut si non spécifié) indique que la vue ne doit pas être développée. Dans cet exemple, editTextMessage est la seule vue définie avec un poids. Elle sera donc développée seule pour remplir tout espace restant dans la disposition parente.
Lorsque vous utilisez l'orientation horizontale, spécifiez android: layout_haut = "0dp" (avec le poids) pour qu'Android calcule la largeur.
Il peut être utile de penser à l'attribut weight en pourcentage. Dans ce cas, le poids total défini est 1, donc cette vue obtient 100% de l'espace restant. Si nous attribuons un poids de 1 à une autre vue, le total sera de 2, donc cette vue obtiendrait 50% de l'espace. Essayez d'ajouter un poids à l'une des autres vues (assurez-vous de changer la hauteur à 0dp ainsi) pour le voir en action.
Si vous avez ajouté un poids à l'une (ou aux deux) des autres vues, avez-vous remarqué la position du texte? Sans spécifier de valeur pour la gravité, le texte reste simplement au centre de l'espace de vue. Le paramètre editTextMessage spécifie: android: gravity = "top", qui force le texte en haut de la vue.
Il y a plus...
Les options d'attributs multiples peuvent être combinées au moyen d'un OU au niveau du bit. (Java utilise le caractère de tuyau (|) pour OU). Par exemple, nous pourrions combiner deux options de gravité à la fois pour aligner le haut du parent et le centre dans l'espace disponible:
android: layout_gravity = "haut | centre"
Il est à noter que les balises layout_gravity et gravity ne sont pas la même chose. Lorsque layout_gravity dicte l'emplacement d'une vue dans son parent, la gravité contrôle le positionnement du contenu dans une vue, par exemple, l'alignement du texte sur un bouton.
Voir également
► La recette précédente, Utilisation du RelativeLayout