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.
<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>
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 bi RelativeLayout
prekril vse, kar je v ScrollView
na dnu strani.
To sem popravil z uporabo dinamično raztegljivega FrameLayout
:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<!-- content goes here -->
<!-- stretching frame layout, using layout_weight -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<!-- content fixated to the bottom of the screen -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- your bottom content -->
</LinearLayout>
</LinearLayout>
</ScrollView>
Druge relativne
postavitve sploh ni treba gnezditi znotraj prve. Preprosto uporabite android:layout_alignParentBottom="true"
v Button in EditText.