web-dev-qa-db-fra.com

Android Disposition Aligner à droite

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é.

69

La mise en page est extrêmement inefficace et gonflée. Vous n'avez pas besoin de tant de LinearLayouts. 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>
140
Octavian Damiean

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.

19
Cristian

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.

4
Alexander Malakhov

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 .

3
alvaroIdu

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>
2
Joseph Selvaraj