674 Stimmen

Wie kann ich die Ansichten am unteren Bildschirmrand ausrichten?

Hier ist 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.

Android Layout - Actual (Left) and Desired (Right)

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 "Senden" und der Texteintrag eine feste Höhe am unteren Rand haben und die Textansicht den restlichen Platz ausfüllt. In ähnlicher Weise in der horizontalen linearen Layout möchte ich die Schaltfläche "Senden", um seinen Inhalt zu umbrechen und für den Texteintrag, um den Rest des Raumes zu füllen.

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 Objekt, das das erste in einem linearen Layout ist, dazu, den gesamten Platz zu füllen, abgesehen von dem Minimum, das die übrigen Objekte 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>

34voto

KeLiuyue Punkte 7831

1. Verwenden Sie ConstraintLayout in Ihrem Root-Layout

Und setzen app:layout_constraintBottom_toBottomOf="parent" um das Layout am unteren Rand des Bildschirms anzuzeigen:

<LinearLayout
    android:id="@+id/LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintBottom_toBottomOf="parent">
</LinearLayout>

2. Verwenden Sie FrameLayout in Ihrem Root-Layout

Einfach einstellen android:layout_gravity="bottom" in Ihrem Layout

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

3. Verwenden Sie LinearLayout in Ihrem Root-Layout ( android:orientation="vertical" )

(1) Ein Layout festlegen android:layout_weight="1" oben in Ihrem Layout

<TextView
    android:id="@+id/TextView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="welcome" />

(2) Setzen Sie das Kind LinearLayout para android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"

Das wichtigste Attribut ist ndroid:gravity="bottom" lassen Sie das Kind auf der Unterseite von Layout anzeigen.

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

4. Verwenden Sie RelativeLayout im Wurzellayout

Und setzen android:layout_alignParentBottom="true" um das Layout am unteren Rand des Bildschirms anzuzeigen

<LinearLayout
    android:id="@+id/LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal">
</LinearLayout>

Ausgabe

Enter image description here

29voto

Michael Reed Punkte 2352

Das funktioniert auch.

<LinearLayout 
    android:id="@+id/linearLayout4"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_below="@+id/linearLayout3"
    android:layout_centerHorizontal="true"
    android:orientation="horizontal" 
    android:gravity="bottom"
    android:layout_alignParentBottom="true"
    android:layout_marginTop="20dp"
>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" 

    />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" 

    />

</LinearLayout>

gravity="bottom" to float LinearLayout elements to bottom

24voto

stevehs17 Punkte 1421

Weiterverfolgung von Die elegante Lösung von Timores Ich habe herausgefunden, dass das Folgende eine vertikale Füllung in einem vertikalen LinearLayout und eine horizontale Füllung in einem horizontalen LinearLayout erzeugt:

<Space
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1" />

20voto

Steve Haley Punkte 54674

Sie müssen nicht einmal die zweite relative Layout innerhalb des ersten. Verwenden Sie einfach die android:layout_alignParentBottom="true" im Schaltfläche y EditText .

12voto

Kiran Parmar Punkte 768

Wenn Sie nicht viele Änderungen vornehmen möchten, können Sie auch einfach nur einfügen:

android:layout_weight="1"

für die TextView mit ID als @+id/TextView d.h.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X