1. ホーム
  2. android

[解決済み] 画面下部のビューを揃えるには?

2022-03-15 15:15:57

質問

以下は私のレイアウトコードです。

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

    <TextView android:text="@string/welcome"
        android:id="@+id/TextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </TextView>

    <LinearLayout android:id="@+id/LinearLayout"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="bottom">

            <EditText android:id="@+id/EditText"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">
            </EditText>

            <Button android:text="@string/label_submit_button"
                android:id="@+id/Button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </Button>

    </LinearLayout>

</LinearLayout>

左側がこのような感じで、右側がこのような感じにしたいのです。

TextViewの高さをfill_parentにするのは当然ですが、これではボタンや入力欄のためのスペースがなくなってしまいます。

本質的な問題は、送信ボタンとテキスト入力は下部の高さが一定で、残りのスペースはテキストビューで埋めたいことです。同様に、水平リニアレイアウトでは、送信ボタンはそのコンテンツをラップし、テキスト入力は残りのスペースを埋めるようにしたいのです。

リニアレイアウトの最初の項目がfill_parentに指定されると、まさにその通りになり、他の項目が入る余地がなくなります。リニアレイアウトの最初のアイテムが、レイアウト内の他のアイテムが必要とする最小限のスペース以外のすべてのスペースを埋めるようにするにはどうしたらよいでしょうか。


リラティブレイアウトは確かにその通りでした。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:text="@string/welcome"
        android:id="@+id/TextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">
    </TextView>

    <RelativeLayout
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >

        <Button
            android:text="@string/label_submit_button"
            android:id="@+id/Button"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </Button>

        <EditText
            android:id="@+id/EditText"
            android:layout_width="fill_parent"
            android:layout_toLeftOf="@id/Button"
            android:layout_height="wrap_content">
        </EditText>

    </RelativeLayout>

</RelativeLayout>

解決方法は?

現代的な方法としては コンストレイントレイアウト で、ビューの下部をConstraintLayoutの下部に拘束します。 app:layout_constraintBottom_toBottomOf="parent"

以下の例では、画面の端と底に配置されるFloatingActionButtonを作成しています。

<android.support.constraint.ConstraintLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_height="match_parent"
   android:layout_width="match_parent">

<android.support.design.widget.FloatingActionButton
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"

    app:layout_constraintBottom_toBottomOf="parent"

    app:layout_constraintEnd_toEndOf="parent" />

</android.support.constraint.ConstraintLayout>

参考までに、以前の回答は残しておきます。

ConstraintLayoutが導入される前は、答えは 相対レイアウト .


画面いっぱいの相対レイアウトなら android:layout_alignParentBottom をクリックすると、ボタンが画面の一番下に移動します。

下部のビューが相対レイアウトで表示されない場合、その上のレイアウトがすべてのスペースを取っている可能性があります。この場合、一番下にあるべきビューをレイアウトファイルの最初に配置し、残りのレイアウトをビューの上に配置するには android:layout_above . これにより、一番下のビューは必要なだけのスペースを取ることができ、残りのレイアウトは画面の残りの部分をすべて埋めることができます。