Kako poravnam poglede na dnu zaslona?

Tukaj je moja koda postavitve;

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

Na levi strani je prikazano, kako to izgleda, na desni strani pa je prikazano, kako želim, da izgleda.

Očiten odgovor je, da TextView nastavimo na fill_parent on height, vendar zaradi tega ne ostane prostora za gumb ali vnosno polje.

V bistvu gre za to, da želim, da sta gumb za oddajo in vnos besedila na dnu fiksne višine, pogled besedila pa zapolni preostali prostor. Podobno v vodoravni linearni postavitvi želim, da gumb za oddajo ovije svojo vsebino in da vnos besedila zapolni preostali prostor.

Če je prvemu elementu v linearni postavitvi ukazano, da zapolni_parent, stori točno to in ne pusti prostora za druge elemente. Kako lahko dosežem, da element, ki je prvi v linearni postavitvi, zapolni ves prostor, razen najmanjšega, ki ga zahtevajo preostali elementi v postavitvi?


Relativne postavitve so bile res pravi odgovor:

    <?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>
Rešitev

Sodoben način je, da imate ConstraintLayout in omejite dno pogleda na dno ConstraintLayout z app:layout_constraintBottom_toBottomOf="parent"

Spodnji primer ustvari gumb FloatingActionButton, ki bo poravnan s koncem in dnom zaslona.





Za referenco bom ohranil svoj stari odgovor.

Pred uvedbo ConstraintLayout je bil odgovor relativna postavitev.


Če imate relativno postavitev, ki zapolnjuje celoten zaslon, bi morali biti sposobni uporabiti android:layout_alignParentBottom za premik gumba na dno zaslona.

Če vaši prikazi na dnu niso prikazani v relativni postavitvi, potem morda postavitev nad njim zaseda ves prostor. V tem primeru lahko pogled, ki bi moral biti na dnu, postavite na prvo mesto v datoteki postavitve, preostali del postavitve pa postavite nad poglede z android:layout_above. Tako lahko spodnji pogled zasede toliko prostora, kolikor ga potrebuje, preostali del postavitve pa lahko zapolni ves preostali zaslon.

Komentarji (6)

V ScrollView to ne deluje, saj bi RelativeLayout prekril vse, kar je v ScrollView na dnu strani.

To sem popravil z uporabo dinamično raztegljivega FrameLayout :















Komentarji (4)

Druge relativne postavitve sploh ni treba gnezditi znotraj prve. Preprosto uporabite android:layout_alignParentBottom="true" v Button in EditText.

Komentarji (1)