207 votes

Comment faire en sorte que la mise en page avec View remplisse l'espace restant ?

Je suis en train de concevoir l'interface utilisateur de mon application. J'ai besoin d'une mise en page qui ressemble à ceci :

Example of desired layout

(< et > sont des boutons). Le problème est que je ne sais pas comment m'assurer que le TextView remplira l'espace restant, avec deux boutons de taille fixe.

Si j'utilise fill_parent pour Text View, le deuxième bouton (>) ne peut pas être affiché.

Comment puis-je créer une mise en page qui ressemble à l'image ?

0 votes

Qu'utilisez-vous comme disposition de la racine ?

1 votes

@woodshy N'importe quelle mise en page est acceptable, ça n'a pas d'importance.

232voto

Vivek Pandey Points 326

La réponse de woodshy a fonctionné pour moi, et elle est plus simple que la réponse de Ungureanu Liviu puisqu'elle n'utilise pas RelativeLayout . Je donne ma disposition pour plus de clarté :

<LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      >

     <Button
        android:layout_width = "80dp"
        android:layout_weight = "0"
        android:layout_height = "wrap_content"
        android:text="&lt;"/>
     <TextView
        android:layout_width = "fill_parent"
        android:layout_height = "wrap_content"
        android:layout_weight = "1"/>
     <Button
        android:layout_width = "80dp"
        android:layout_weight = "0"
        android:layout_height = "wrap_content"
        android:text="&gt;"/>   
 </LinearLayout>

0 votes

Il y a des choses comme alignLeft et alignParentLeft etc., ce qui n'est jamais possible avec LinearLayout .

0 votes

Je ne comprends pas vraiment comment cela est possible, mais c'est une astuce vraiment cool pour éviter le RelativeLayout.

2 votes

Comment cela peut-il être la réponse acceptée ? Il n'y a pas de vue d'image, c'est seulement une partie de la solution. Au moins, c'est mieux que l'ancienne réponse la plus votée avec la mise en page relative (j'ai expliqué pourquoi dans ma réponse).

96voto

woodshy Points 2578

Dans le cas où <VUE TEXTE > est placé dans LinearLayout, définissez le proprty Layout_weight de < et > à 0 et 1 pour TextView.
Dans le cas de RelativeLayout, alignez < et > à gauche et à droite et définissez les propriétés "Layout to left of" et "Layout to right of" de TextView aux ids de < et >.

0 votes

Quelqu'un a-t-il encore besoin d'un échantillon ?

0 votes

Comment ajouter des images dans cette mise en page pour remplir toute la vue

0 votes

comment ajouter une image à l'intérieur d'une mise en page relative, pour remplir la vue entière ?

72voto

Ungureanu Liviu Points 1573

Si vous utilisez RelativeLayout vous pouvez le faire comme ceci :

<RelativeLayout
    android:layout_width = "fill_parent"
    android:layout_height = "fill_parent">
    <ImageView
        android:id = "@+id/my_image"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_alignParentTop ="true" />
    <RelativeLayout
        android:id="@+id/layout_bottom"
        android:layout_width="fill_parent"
        android:layout_height = "50dp"
        android:layout_alignParentBottom = "true">
        <Button
            android:id = "@+id/but_left"
            android:layout_width = "80dp"
            android:layout_height = "wrap_content"
            android:text="&lt;"
            android:layout_alignParentLeft = "true"/>
        <TextView
            android:layout_width = "fill_parent"
            android:layout_height = "wrap_content"
            android:layout_toLeftOf = "@+id/but_right"
            android:layout_toRightOf = "@id/but_left" />
        <Button
            android:id = "@id/but_right"
            android:layout_width = "80dp"
            android:layout_height = "wrap_content"
            android:text="&gt;"
            android:layout_alignParentRight = "true"/>
    </RelativeLayout>
</RelativeLayout>

0 votes

Merci, ça marche :) Mais je ne comprends pas. Pourquoi les TextViews ne remplissent pas tout l'espace, pas pour les > bouton ?

2 votes

Pourquoi avoir deux mises en page relatives imbriquées ? Celle de la racine devrait suffire. Ensuite, il suffit de s'assurer que les enfants de la disposition relative inférieure sont tous alignParentBottom="true".

0 votes

@Noel Vous avez raison. J'ai choisi 2 layouts parce que c'est la façon dont je suis habitué : dans mes applications il peut arriver que j'ai besoin de changer la visibilité de quelques vues et il est plus facile de les mettre toutes dans un layout et de changer la visibilité juste pour ce layout. Mon exemple n'est pas parfait mais il fonctionne et il pourrait être utile à quelqu'un.

33voto

Tom Howard Points 103

Utilisation d'un ConstraintLayout j'ai trouvé quelque chose comme

<Button
    android:id="@+id/left_button"
    android:layout_width="80dp"
    android:layout_height="48dp"
    android:text="&lt;"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toRightOf="@+id/left_button"
    app:layout_constraintRight_toLeftOf="@+id/right_button"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/right_button"
    android:layout_width="80dp"
    android:layout_height="48dp"
    android:text="&gt;"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

fonctionne. La clé est de définir les contraintes de bord droit, gauche, haut et bas de manière appropriée, puis de définir la largeur et la hauteur à 0dp et le laisser trouver sa propre taille.

7 votes

Je commence juste à utiliser ConstraintLayout, c'est génial de savoir que la largeur et la hauteur peuvent être déterminées par les contraintes lorsqu'elles sont réglées sur "0", merci pour cela :)

0 votes

Il est important de faire attention à la direction de la flèche de chaque contrainte. Assurez-vous que TextView a les contraintes gauche et droite. Le site TextView ne s'étire pas si le premier Button a la bonne contrainte à la TextView et le dernier Button a la contrainte de gauche à la TextView .

0 votes

Beaucoup mieux ! améliore les performances en n'ayant pas de mises en page imbriquées. Merci de nous avoir rappelé l'astuce 0dp.

7voto

Daniel Points 93

C'est simple Vous définissez la largeur ou la hauteur minimale, en fonction de ce que vous recherchez, horizontale ou verticale. Et pour l'autre objet (celui qui doit remplir l'espace restant), vous définissez un poids de 1 (définissez la largeur pour envelopper son contenu), afin qu'il remplisse le reste de la zone.

<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center|left"
        android:orientation="vertical" >
</LinearLayout>
<LinearLayout
        android:layout_width="80dp"
        android:layout_height="fill_parent"
        android:minWidth="80dp" >
</LinearLayout>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X