web-dev-qa-db-ja.com

Androidレイアウトの右揃え

次のレイアウトが用意されています

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

この質問の目的のために、私はレイアウトの下半分のみを心配しています。現在、3つの画像ボタンが含まれています。最初の2つは、左に揃えて隣同士に並べたいです。 3番目は、右側に揃えたいです。

現状では、最初の2つのボタンは私が望む場所にありますが、3番目のボタンはずんぐり左揃えのままです。どのように正しく整列させますか?.

レイアウトは非常に非効率的で肥大化しています。それほど多くのLinearLayoutsは必要ありません。実際、LinearLayoutはまったく必要ありません。

RelativeLayoutを1つだけ使用します。このような。

<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

RelativeLayoutを1つ使用するだけで、すべてを実行できます(ただし、Android:orientationパラメーターは不要です)。そのため、LinearLayoutに多数のものを含める代わりに、次のようなことができます。

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

お気づきのように、いくつかのXMLパラメーターが欠落しています。私はあなたが置かなければならない基本的なパラメーターを示していました。残りは完了できます。

19
Cristian

LinearLayout を使用したい場合は、layout_weightSpace要素を使用して位置合わせを行うことができます。

例えば。次のレイアウトでは、textViewtextView2が隣り合って配置され、textView3は右揃えになります

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

layout_weighttextView2に設定する場合、Spaceなしでも同じ効果を得ることができます。物事がより分離されており、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" />

設定する必要はありませんlayout_widthは、その重量に応じて再計算されるため、明示的に注意してください(垂直LinearLayoutの要素に高さを設定する方法と同じです) 。その他のレイアウトパフォーマンスのヒントについては、 Android Layout Tricks seriesをご覧ください。

4

これは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);

別の種類のレイアウト(LinearLayoutの例)では、単にRelativeLayoutforLinearLayout

3
alvaroIdu

古いバージョンをサポートするには、以下のようにスペースをビューに置き換えることができます。このビューを、左端のコンポーネントの後から右端のコンポーネントの前に追加します。 weight = 1のこのビューは、空間を引き伸ばして埋めます

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

完全なサンプルコードをここに示します。 4つのコンポーネントがあります。左右に2つの矢印があります。テキストとスピナーは中央にあります。

    <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