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 :
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 :
**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 :