69 votes

Alignement droit de la mise en page Android

J'ai mis en place la disposition suivante

<?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'intéresse qu'à la moitié inférieure de la maquette. Actuellement, elle contient 3 boutons d'image. Je veux que les deux premiers soient alignés à gauche l'un à côté de l'autre. Je veux que le troisième soit aligné sur le côté droit.

En l'état actuel des choses, les deux premiers boutons sont là où je veux qu'ils soient, mais le troisième reste obstinément aligné à gauche. Comment faire pour qu'il soit aligné à droite ?

142voto

Octavian Damiean Points 20620

La mise en page est extrêmement inefficace et gonflée. Vous n'avez pas besoin d'autant de LinearLayout s. En fait, vous n'avez pas besoin de LinearLayout du tout.

N'utilisez qu'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>

19voto

Cristian Points 92147

Vous pouvez faire tout cela en utilisant un seul RelativeLayout (qui, d'ailleurs, n'ont pas besoin de android:orientation paramètre). Ainsi, au lieu d'avoir un LinearLayout contenant un tas d'éléments, 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 montrais juste les paramètres de base que vous deviez mettre. Vous pouvez compléter le reste.

4voto

Alexander Malakhov Points 1167

Si vous voulez utiliser LinearLayout vous pouvez faire l'alignement avec layout_weight con Space élément.

Par exemple, en suivant les lieux de mise en page textView y textView2 l'un à côté de l'autre 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 voulez mettre layout_weight a textView2 . C'est juste que j'aime que les choses soient plus séparées, plus pour démontrer Space élément.

    <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 devez (pas obligatoirement) définir layout_width explicitement car il sera recalculé en fonction de son poids de toute façon (de la même façon que vous devez définir la hauteur dans les éléments de la verticale LinearLayout ). Pour d'autres conseils sur les performances de mise en page, voir Trucs de mise en page pour Android série.

3voto

user1562775 Points 36

Il s'agit d'un exemple pour un 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 mise en page (par exemple LinearLayout), il suffit de modifier les paramètres suivants RelativeLayout para 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