wake-up-neo.net

Android Layout rechtsbündig

Ich habe das folgende Layout

<?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>

Bei dieser Frage geht es mir nur um die untere Hälfte des Layouts. Im Moment enthält es 3 Bildknöpfe. Die ersten 2 will ich rechts nebeneinander linksbündig ausrichten. Das dritte, ich möchte auf der rechten Seite ausgerichtet sein.

Die ersten beiden Schaltflächen befinden sich genau dort, wo ich sie haben möchte, aber die dritte bleibt störrisch linksbündig. Wie würde ich es richtig ausrichten.

Das Layout ist äußerst ineffizient und aufgebläht. Sie brauchen nicht so viele LinearLayouts. Tatsächlich brauchen Sie überhaupt kein LinearLayout.

Verwenden Sie nur ein RelativeLayout. So was.

<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

Sie können dies alles mit nur einem RelativeLayout tun (der übrigens keinen Android:orientation - Parameter benötigt). Anstatt also ein LinearLayout zu haben, das eine Reihe von Dingen enthält, können Sie Folgendes tun:

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

Wie Sie bemerkt haben, fehlen einige XML-Parameter. Ich zeigte nur die grundlegenden Parameter, die Sie setzen mussten. Sie können den Rest erledigen.

19
Cristian

Wenn Sie LinearLayout verwenden möchten, können Sie die Ausrichtung mit layout_weight mit Space Element.

Z.B. Folgendes Layout platziert textView und textView2 nebeneinander und textView3 wird rechtsbündig ausgerichtet

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

sie können den gleichen Effekt auch ohne Space erzielen, wenn Sie layout_weight bis textView2. Es ist nur so, dass ich Dinge mehr getrennt mag, plus um das Space Element zu demonstrieren.

    <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" />

Beachten Sie, dass Sie sollten (müssen aber nicht) festlegenlayout_width explizit, da es sowieso nach seinem Gewicht neu berechnet wird (genauso wie Sie die Höhe in vertikalen LinearLayout -Elementen festlegen sollten). Weitere Tipps zur Layoutleistung finden Sie unter Android Layout Tricks series.

4

Dies ist ein Beispiel für ein 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);

Bei einer anderen Art von Layout (z. B. LinearLayout) müssen Sie einfach RelativeLayout für LinearLayout ändern.

3
alvaroIdu

Zur Unterstützung älterer Versionen kann Space durch View (siehe unten) ersetzt werden. Fügen Sie diese Ansicht zwischen der Komponente ganz links und der Komponente ganz rechts hinzu. Diese Ansicht mit weight = 1 wird gedehnt und füllt den Raum aus

    <View
        Android:layout_width="0dp"
        Android:layout_height="20dp"
        Android:layout_weight="1" />

Der vollständige Beispielcode ist hier angegeben. Es hat 4 Komponenten. Zwei Pfeile befinden sich auf der rechten und linken Seite. Der Text und Spinner werden in der Mitte sein.

    <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