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>
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.V
ScrollView
to ne deluje, saj biRelativeLayout
prekril vse, kar je vScrollView
na dnu strani.To sem popravil z uporabo dinamično raztegljivega
FrameLayout
:Druge
relativne
postavitve sploh ni treba gnezditi znotraj prve. Preprosto uporabiteandroid:layout_alignParentBottom="true"
v Button in EditText.