J'ai la mise en page suivante en place
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical" Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<LinearLayout Android:orientation="vertical"
Android:layout_width="fill_parent" Android:layout_height="fill_parent"
Android:layout_weight="1">
<WebView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/webview" Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />
</LinearLayout>
<LinearLayout Android:orientation="horizontal" Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:layout_weight="13">
<LinearLayout Android:id="@+id/LinearLayout01" Android:layout_width="wrap_content" Android:layout_height="wrap_content">
<LinearLayout Android:orientation="horizontal" Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:layout_weight="1">
<ImageButton Android:background="@null" Android:id="@+id/back" Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:src="@drawable/back" Android:padding="10dip" />
</LinearLayout>
<LinearLayout Android:orientation="horizontal" Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:layout_weight="1">
<ImageButton Android:background="@null" Android:id="@+id/forward" Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:src="@drawable/forward" Android:padding="10dip" />
</LinearLayout>
</LinearLayout>
<RelativeLayout Android:orientation="horizontal" Android:layout_width="wrap_content" Android:layout_height="fill_parent" Android:layout_weight="1" >
<ImageButton Android:background="@null" Android:id="@+id/special" Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:src="@drawable/barcode" Android:padding="10dip" Android:layout_gravity="right"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
Pour les besoins de cette question, je ne m'inquiète que de la moitié inférieure de la mise en page. À l'heure actuelle, il contient 3 boutons d'image. Les 2 premiers, je veux juste côte à côte aligné à gauche. Le troisième, je veux être aligné sur le côté droit.
En l'état, les deux premiers boutons sont là où je veux qu'ils soient, mais le troisième reste obstinément à gauche. Comment pourrais-je le faire bien aligné.
La mise en page est extrêmement inefficace et gonflée. Vous n'avez pas besoin de tant de LinearLayout
s. En fait, vous n'avez pas besoin de LinearLayout
du tout.
Utilisez un seul RelativeLayout
. Comme ça.
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<ImageButton Android:background="@null"
Android:id="@+id/back"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/back"
Android:padding="10dip"
Android:layout_alignParentLeft="true"/>
<ImageButton Android:background="@null"
Android:id="@+id/forward"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/forward"
Android:padding="10dip"
Android:layout_toRightOf="@id/back"/>
<ImageButton Android:background="@null"
Android:id="@+id/special"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/barcode"
Android:padding="10dip"
Android:layout_alignParentRight="true"/>
</RelativeLayout>
Vous pouvez faire tout cela en utilisant un seul RelativeLayout
(qui, d'ailleurs, n'a pas besoin de Android:orientation
paramètre). Ainsi, au lieu d’avoir un LinearLayout
, contenant un tas de choses, vous pouvez faire quelque chose comme:
<RelativeLayout>
<ImageButton
Android:layout_width="wrap_content"
Android:id="@+id/the_first_one"
Android:layout_alignParentLeft="true"/>
<ImageButton
Android:layout_width="wrap_content"
Android:layout_toRightOf="@+id/the_first_one"/>
<ImageButton
Android:layout_width="wrap_content"
Android:layout_alignParentRight="true"/>
</RelativeLayout>
Comme vous l'avez remarqué, il manque certains paramètres XML. Je viens de montrer les paramètres de base que vous avez dû mettre. Vous pouvez compléter le reste.
Si vous voulez utiliser LinearLayout , vous pouvez aligner avec layout_weight
avec l'élément Space
.
Par exemple. les emplacements de mise en page suivants textView
et textView2
_ côte à côte et textView3
sera aligné à droite
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:text="Medium Text"
Android:id="@+id/textView" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:text="Medium Text"
Android:id="@+id/textView2" />
<Space
Android:layout_width="0dp"
Android:layout_weight="1"
Android:layout_height="20dp" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:text="Medium Text"
Android:id="@+id/textView3" />
</LinearLayout>
vous pouvez obtenir le même effet sans Space
si vous définissiez layout_weight
à textView2
. C'est juste que j'aime les choses plus séparées, en plus de démontrer l'élément Space
.
<TextView
Android:layout_width="0dp"
Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:text="Medium Text"
Android:id="@+id/textView2" />
Notez que vous ne devriez pas (définir)layout_width
_ explicitement, car il sera recalculé en fonction de son poids (de la même manière, vous devriez définir la hauteur dans les éléments de la verticale LinearLayout
). Pour d'autres conseils sur les performances de présentation, voir Astuces de présentation Android séries.
Ceci est un exemple pour RelativeLayout:
RelativeLayout relativeLayout=(RelativeLayout)vi.findViewById(R.id.RelativeLayoutLeft);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)relativeLayout.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
relativeLayout.setLayoutParams(params);
Avec un autre type de présentation (exemple, LinearLayout), il vous suffit simplement de changer RelativeLayout pour LinearLayout .
Pour prendre en charge les versions plus anciennes, l’espace peut être remplacé par Voir comme ci-dessous. Ajoutez cette vue entre après le composant le plus à gauche et avant le composant le plus à droite. Cette vue avec un poids = 1 va s'étirer et remplir l'espace
<View
Android:layout_width="0dp"
Android:layout_height="20dp"
Android:layout_weight="1" />
Un exemple de code complet est donné ici. Il a 4 composants. Deux flèches seront à droite et à gauche. Le texte et Spinner seront au milieu.
<ImageButton
Android:id="@+id/btnGenesis"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center|center_vertical"
Android:layout_marginBottom="2dp"
Android:layout_marginLeft="0dp"
Android:layout_marginTop="2dp"
Android:background="@null"
Android:gravity="left"
Android:src="@drawable/prev" />
<View
Android:layout_width="0dp"
Android:layout_height="20dp"
Android:layout_weight="1" />
<TextView
Android:id="@+id/lblVerseHeading"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:textSize="25sp" />
<Spinner
Android:id="@+id/spinnerVerses"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="5dp"
Android:gravity="center"
Android:textSize="25sp" />
<View
Android:layout_width="0dp"
Android:layout_height="20dp"
Android:layout_weight="1" />
<ImageButton
Android:id="@+id/btnExodus"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center|center_vertical"
Android:layout_marginBottom="2dp"
Android:layout_marginLeft="0dp"
Android:layout_marginTop="2dp"
Android:background="@null"
Android:gravity="right"
Android:src="@drawable/next" />
</LinearLayout>