4 votes

Android layout_weight comportment

J'essaie de construire une mise en page Android en utilisant layout_weight pour s'adapter à toutes les tailles d'appareils et j'ai un peu de mal à comprendre son comportement.

J'ai remarqué que le fait de changer le layout_width / layout_height a influencé le layout_weight comportement, mais je ne comprends pas comment.

Disons, par exemple, que je veux avoir une verticale LinearLayout divisé en trois quarts d'heure LinearLayout de telle sorte que celle du haut et celle du bas remplissent 25% de l'écran, et celle du milieu 50%, et cela ne devrait pas dépendre du contenu des mises en page intérieures. (Si le contenu d'une mise en page intérieure LinearLayout est trop grande, elle ne devrait pas déplacer les autres mises en page)

Pour ce faire, dois-je définir l'option layout_height de l'élément interne LinearLayout a fill_parent ou à wrap_content ?

Gracias.

EDIT : Il semble que le layout_weight soit inversement proportionnel à la taille que la mise en page occupera.

3 exemples :

Poids 1/1/1 (fonctionne comme prévu)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
        <LinearLayout
            android:id="@+id/layout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#FF0000"/> //RED
        <LinearLayout
            android:id="@+id/layout2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#00FF00"/> //GREEN
        <LinearLayout
            android:id="@+id/layout3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#0000FF"/> //BLUE
</LinearLayout>

Résultats : enter image description here

Poids 1/2/1 (Pourquoi, oh pourquoi ?)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
        <LinearLayout
            android:id="@+id/layout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#FF0000"/> //RED
        <LinearLayout
            android:id="@+id/layout2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="2"
            android:background="#00FF00"/> //GREEN
        <LinearLayout
            android:id="@+id/layout3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#0000FF"/> //BLUE
</LinearLayout>

Résultats : enter image description here

**Poids 3/2/3 (Ce que j'avais l'intention de faire avec 1/2/1) :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
        <LinearLayout
            android:id="@+id/layout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="3"
            android:background="#FF0000"/> //RED
        <LinearLayout
            android:id="@+id/layout2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="2"
            android:background="#00FF00"/> //GREEN
        <LinearLayout
            android:id="@+id/layout3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="3"
            android:background="#0000FF"/> //BLUE
</LinearLayout>

Résultats : enter image description here

3voto

Ziwei Zeng Points 406

Vous pouvez essayer de régler layout_height = 0dp

3voto

Jarl Points 1243

Pour le layout_weight pour fonctionner comme prévu (et documenté), vous devez no fixer le layout_height ni l'un ni l'autre fill_parent ni match_parent .

L'exemple à droite sur http://developer.Android.com/guide/topics/ui/layout/linear.html#Weight montre un exemple où layout_height est réglé sur 0dp . Cependant, le fait de ne pas le régler du tout ou de le régler sur wrap_content fait également le layout_weight fonctionnent comme prévu.

1voto

Egor Points 15923

Vous devez définir le layout_height des trois mises en page intérieures sur "fill_parent", puis modifier leur poids pour qu'elles aient l'aspect souhaité.

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