Wie kann ich die Ansichten am unteren Bildschirmrand ausrichten?

Hier's mein Layout-Code;

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

Auf der linken Seite sehen Sie, wie es aussieht, und auf der rechten Seite, wie ich es haben möchte.

Die offensichtliche Antwort ist, die TextView auf fill_parent on height zu setzen, aber das führt dazu, dass kein Platz mehr für die Schaltfläche oder das Eingabefeld bleibt.

Im Wesentlichen geht es darum, dass ich möchte, dass die Schaltfläche "Submit" und der Texteintrag eine feste Höhe am unteren Rand haben und die Textansicht den Rest des Platzes ausfüllt. In ähnlicher Weise möchte ich im horizontalen linearen Layout, dass die Schaltfläche "Senden" den Inhalt umschließt und der Texteintrag den restlichen Platz ausfüllt.

Wenn das erste Element in einem linearen Layout die Anweisung fill_parent erhält, tut es genau das und lässt keinen Platz für andere Elemente. Wie bringe ich ein Element, das das erste in einem linearen Layout ist, dazu, den gesamten Raum zu füllen, abgesehen von dem Minimum, das die übrigen Elemente im Layout benötigen?


Relative Layouts waren tatsächlich die Antwort:

    <?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>
Lösung

Die moderne Art, dies zu tun, ist, ein ConstraintLayout zu haben und den unteren Rand der Ansicht auf den unteren Rand des ConstraintLayouts zu beschränken mit app:layout_constraintBottom_toBottomOf="parent"

Das folgende Beispiel erstellt einen FloatingActionButton, der am Ende und am unteren Rand des Bildschirms ausgerichtet wird.





Als Referenz werde ich meine alte Antwort beibehalten.

Vor der Einführung von ConstraintLayout war die Antwort ein relatives Layout.


Wenn Sie ein relatives Layout haben, das den gesamten Bildschirm ausfüllt, sollten Sie android:layout_alignParentBottom` verwenden können, um die Schaltfläche an den unteren Rand des Bildschirms zu verschieben.

Wenn Ihre Ansichten am unteren Rand nicht in einem relativen Layout angezeigt werden, kann es sein, dass das Layout darüber den ganzen Platz einnimmt. In diesem Fall können Sie die Ansicht, die unten sein soll, an die erste Stelle in Ihrer Layout-Datei setzen und den Rest des Layouts mit android:layout_above über die Ansichten positionieren. Auf diese Weise kann die untere Ansicht so viel Platz einnehmen, wie sie braucht, und der Rest des Layouts kann den gesamten Rest des Bildschirms ausfüllen.

Kommentare (6)

In einem ScrollView funktioniert das nicht, da das RelativeLayout dann alles überlappen würde, was im ScrollView unten auf der Seite ist.

Ich habe das Problem mit einem dynamisch dehnbaren FrameLayout gelöst:















Kommentare (4)

Sie brauchen das zweite "relative" Layout nicht einmal innerhalb des ersten zu verschachteln. Verwenden Sie einfach die Option android:layout_alignParentBottom="true" in Button und EditText.

Kommentare (1)