Berikut ini's my letak kode;
<?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>
Apa ini terlihat seperti berada di kiri dan apa yang saya inginkan adalah di sebelah kanan.
Jawaban yang jelas adalah untuk mengatur TextView untuk fill_parent pada ketinggian, tetapi hal ini menyebabkan tidak ada ruang untuk menjadi kiri untuk tombol atau bidang entri.
Pada dasarnya masalah ini adalah bahwa saya ingin submit dan entri teks akan tetap tinggi di bagian bawah, dan tampilan teks untuk mengisi sisa ruang. Demikian pula, dalam tata letak linear horizontal aku ingin submit untuk membungkus konten dan untuk entri teks untuk mengisi sisa ruang.
Jika item pertama dalam tata letak linear diperintahkan untuk fill_parent itu tidak tepat, tidak meninggalkan ruang untuk barang-barang lainnya. Bagaimana cara mendapatkan item yang pertama dalam tata letak linear untuk mengisi semua ruang yang terpisah dari minimum yang diperlukan oleh seluruh barang-barang di layout?
Relative layout memang jawabannya:
<?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>
Cara modern untuk melakukan ini adalah untuk memiliki ConstraintLayout dan membatasi bawah melihat ke bawah ConstraintLayout dengan app:layout_constraintBottom_toBottomof="orang tua"
Contoh di bawah ini menciptakan FloatingActionButton yang akan selaras ke ujung dan bagian bawah layar.
<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>
Untuk referensi, saya akan menjaga tua saya menjawab.
Sebelum pengenalan ConstraintLayout jawabannya adalah tata letak relatif.
Jika anda memiliki tata letak relatif yang mengisi seluruh layar anda harus dapat menggunakan android:layout_alignParentBottom
untuk memindahkan tombol ke bagian bawah layar.
Jika pandangan anda di bawah tidak ditampilkan dalam tata letak relatif maka mungkin tata letak di atas itu mengambil semua ruang. Dalam hal ini anda dapat menempatkan lihat, itu harus di bawah, pertama di file layout dan posisi sisa tata letak di atas pandangan dengan android:layout_above
. Hal ini memungkinkan tampilan bawah untuk mengambil lebih banyak ruang yang dibutuhkan, dan sisanya dari tata letak dapat mengisi seluruh layar.
Dalam ScrollView
ini doesn't bekerja, sebagai RelativeLayout
kemudian akan tumpang tindih apa yang ada di ScrollView
di bagian bawah halaman.
Saya tetap menggunakan dinamis peregangan 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>
Anda dapat menjaga awal tata letak linear oleh bersarang relatif tata letak dalam tata letak linear:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button android:text="submit"
android:id="@+id/Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">
</Button>
<EditText android:id="@+id/EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/Button"
android:layout_alignParentBottom="true">
</EditText>
</RelativeLayout>
</LinearLayout>
Jawaban di atas (oleh Janusz) adalah cukup benar, tapi aku personnally don't merasa 100% confortable dengan RelativeLayouts, jadi saya lebih memilih untuk memperkenalkan 'filler', kosong TextView, seperti ini:
<!-- filler -->
<TextView android:layout_height="0dip"
android:layout_width="fill_parent"
android:layout_weight="1" />
sebelum elemen yang harus di bagian bawah layar.
Anda dapat melakukan ini dengan LinearLayout atau ScrollView, terlalu. Kadang-kadang lebih mudah untuk menerapkan dari RelativeLayout. Satu-satunya hal yang perlu anda lakukan adalah untuk menambahkan tampilan berikut sebelum Pandangan anda ingin menyelaraskan ke bagian bawah layar:
<View
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" />
Hal ini menciptakan kosong view, mengisi ruang kosong dan mendorong ke depan pandangan ke bagian bawah layar.
Hal ini juga bekerja.
<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>
ConstraintLayout
di root tata LetakDan set app:layout_constraintBottom_toBottomof="orang tua"
untuk membiarkan tata Letak di bagian bawah layar:
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">
</LinearLayout>
FrameLayout
di root tata LetakHanya mengatur android:layout_gravity="bottom"
dalam tata letak anda
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal">
</LinearLayout>
LinearLayout
di root tata Letak (android:orientation="vertikal"
)(1) Mengatur tata letak android:layout_weight="1"
pada bagian atas dari tata Letak anda
<TextView
android:id="@+id/TextView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="welcome" />
(2) Menetapkan anak LinearLayout
untuk android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"
Atribut utama adalah ndroid:gravity="bottom"
, biarkan anak Melihat di bawah tata Letak.
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:orientation="horizontal">
</LinearLayout>
RelativeLayout
di root tata LetakDan set android:layout_alignParentBottom="benar"
untuk membiarkan tata Letak di bagian bawah layar
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
</LinearLayout>
Menindaklanjuti Timores's solusi elegan, saya telah menemukan bahwa setelah menciptakan vertikal mengisi LinearLayout vertikal dan horizontal mengisi horizontal LinearLayout:
<Space
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
Jika anda don't ingin membuat banyak perubahan, maka anda hanya bisa menempatkan:
android:layout_weight="1"
untuk TextView memiliki ID sebagai @+id/TextView
saya.e
<TextView android:text="@string/welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</TextView>
Membuat kedua header dan footer, berikut ini adalah contohnya:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/backgroundcolor"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="#FF0000">
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:background="#FFFF00">
</RelativeLayout>
</RelativeLayout>
Gunakan kode di bawah ini. Menyelaraskan tombol buttom. It's bekerja.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_back"
android:layout_width="100dp"
android:layout_height="80dp"
android:text="Back" />
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.97"
android:gravity="center"
android:text="Payment Page" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"/>
</LinearLayout>
</LinearLayout>
Untuk kasus seperti ini, selalu menggunakan RelativeLayouts. Sebuah LinearLayout ini tidak dimaksudkan untuk suatu penggunaan.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/db1_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- Place your layout here -->
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:orientation="horizontal"
android:paddingLeft="20dp"
android:paddingRight="20dp" >
<Button
android:id="@+id/setup_macroSavebtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Save" />
<Button
android:id="@+id/setup_macroCancelbtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Cancel" />
</LinearLayout>
</RelativeLayout>
Dalam kasus anda memiliki hirarki seperti ini:
<ScrollView>
|-- <RelativeLayout>
|-- <LinearLayout>
Pertama, menerapkan android:fillViewport="benar"
ke ScrollView
dan kemudian menerapkan android:layout_alignParentBottom="benar"
ke LinearLayout
.
Ini bekerja untuk saya sempurna.
<ScrollView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:scrollbars="none"
android:fillViewport="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/linearLayoutHorizontal"
android:layout_alignParentBottom="true">
</LinearLayout>
</RelativeLayout>
</ScrollView>
Hal ini dapat dilakukan dengan linear layout juga.
Hanya menyediakan Height = 0dp dan berat badan = 1 untuk tata letak di atas dan salah satu yang anda inginkan di bawah. Hanya menulis height = bungkus isi dan tidak berat.
Ini memberikan bungkus konten untuk tata letak (salah satu yang berisi mengedit teks dan tombol) dan kemudian salah satu yang memiliki berat badan menempati sisa tata letak.
Saya menemukan ini oleh kecelakaan.
Saya menggunakan solusi Janusz diposting, tapi aku menambahkan padding terakhir sejak Lihat bagian atas dari layout saya adalah ScrollView.
Yang ScrollView akan sebagian tersembunyi seperti tumbuh dengan konten. Menggunakan android:paddingBottom
pada Pandangan terakhir membantu menampilkan semua konten di ScrollView.