Saya ingin menunjukkan tombol di bawah a ListView
. Masalahnya adalah, jika ListView
diperpanjang (item ditambahkan ...), tombol didorong keluar dari layar.
Saya mencoba LinearLayout
dengan bobot (seperti yang disarankan di Android: mengapa tidak ada maxHeight untuk Tampilan? ), Tetapi entah bobot saya salah atau tidak berhasil.
Juga, saya menemukan petunjuk di suatu tempat untuk menggunakan file RelativeLayout
. The ListView
kemudian akan ditetapkan di atas tombol dengan android:layout_above
param.
Masalah dengan ini adalah saya tidak tahu bagaimana memposisikan tombol sesudahnya. Dalam contoh yang saya temukan, Tampilan di bawah ListView
telah disesuaikan menggunakan android:layout_alignParentBottom
, tetapi saya tidak ingin tombol saya menempel di bagian bawah layar.
Adakah ide selain menggunakan metode setHeight dan beberapa penghitungan ruang yang dibutuhkan?
Sunting: Saya mendapat banyak jawaban yang berguna.
Solusi bigstone & user639183 hampir bekerja dengan sempurna. Namun, saya harus menambahkan bantalan / margin ekstra ke bagian bawah tombol, karena masih akan didorong setengah jalan keluar dari layar (tetapi kemudian berhenti)
Jawaban Adinia dengan tata letak relatif hanya boleh jika Anda ingin tombol tetap di bagian bawah layar. Bukan itu yang saya inginkan tapi mungkin masih berguna untuk orang lain.
Solusi AngeloS adalah yang saya pilih di akhir karena baru saja menciptakan efek yang saya inginkan. Namun, saya membuat dua perubahan kecil di
LinearLayout
sekitar tombol:Pertama, karena saya tidak ingin memiliki nilai absolut dalam tata letak saya, saya mengubahnya
android:layout_height="45px"
kewrap_content
, yang juga berfungsi dengan baik.Kedua, karena saya ingin tombolnya berada di tengah secara horizontal, yang hanya didukung oleh vertikal
LinearLayout
, saya mengubah android: orientasi = "horizontal" menjadi "vertikal".
AngeloS juga menyatakan di posting awalnya bahwa dia tidak yakin apakah
android:layout_weight="0.1"
param diLinearLayout
sekitarListView
berpengaruh; Saya baru saja mencoba dan ternyata benar! Tanpa, tombol akan didorong keluar dari layar lagi.
sumber
android:layout_alignParentBottom="true"
. Tetapi untuk memperjelas, apakah Anda ingin tombol tetap terpasang di bagian bawah ListView saat item hanya ada sedikit? Jika ya, lihat apa yang dikatakan Rich.Jawaban:
Saya memiliki masalah yang tepat ini dan untuk mengatasinya saya membuat dua terpisah
LinearLayouts
untuk menampungListView
danButton
masing - masing. Dari sana saya memasukkan keduanya ke dalam yang lainLinear Layout
dan mengatur wadah ituandroid:orientation
kevertical
. Saya juga mengatur bobotLinearLayout
yang ditampungListView
ke0.1
tapi saya tidak tahu apakah itu berpengaruh. Dari sana, Anda dapat mengatur ketinggian wadah bawah (yang memiliki tombol Anda) ke ketinggian apa pun yang Anda inginkan.EDIT ini yang saya maksud:
Solusi di atas akan memperbaiki tombol di bagian bawah layar.
Agar tombol mengapung di bagian bawah daftar, ubah ketinggian
ListView01
menjadiwrap_content
:sumber
<div
tag di HTML .. ini hanya pembungkus dan solusi ini pasti berhasil.Saya memecahkan masalah ini dalam kode, mengatur ketinggian listview hanya jika memiliki lebih dari 5 item di dalamnya:
Perhatikan bahwa saya menyetel tinggi maksimal menjadi 5,5 kali tinggi satu item, sehingga pengguna akan tahu pasti ada beberapa pengguliran yang harus dilakukan! :)
sumber
Pada suntingan terakhir Anda, Anda hanya perlu menambahkan
android:layout_above="@+id/butt1"
kode ListView Anda.Dan untuk menunjukkan kepada Anda (dan semua orang di sini yang mencoba jawaban sebelumnya) bahwa Anda benar-benar tidak perlu menggunakan lebih dari satu
RelativeLayout
, berikut adalah kode Anda yang telah diperbaiki :dan hasilnya , menggunakan beberapa daftar acak:
sumber
Menggunakan
LinearLayout
, atur tinggi AndaListView
danButton
kewrap_content
dan tambahkan berat = 1 keListView
. Ini harus bekerja sesuai keinginan Anda.Dan ya, mengatur
layout_gravity
dariButton
untukbottom
sumber
Menemukan cara untuk melakukan ini tanpa menggunakan wadah bersarang, terinspirasi dari solusi AngeloS.
Saya menggunakan a
LinearLayout
dengan orientasi vertikal, yang memilikiListView
tombol dan. Saya mengaturandroid:layout_weight="0.1"
untukListView
.Itu berhasil membuat tombol menempel di bagian bawah daftar selalu. Dan tombol tidak bisa ditekan dari layar saat daftar bertambah.
sumber
android:layout_height="wrap_content"
untuk LinearLayout, seperti dalam solusi Anda, ini berfungsi dengan sempurna, dan tidak hanya pada 4.4.3, tetapi karena Sparkle tidak menyebutkannya, saya mencobanyamatch_parent
sebelumnya.RelativeLayout
adalah solusinya, jika Anda tidak ingin tombol berada terlalu dekat dengan bagian bawah Anda dapat menambahkan margin (padding tombol akan merusaknya karena menggunakan latar belakang 9-patch, dan mengatur paddingnya sendiri).Ini akan sama jika Anda menggunakan a
LinearLayout
: cara untuk mencapai apa yang Anda inginkan adalah dengan menyetelListView
ke tinggi = 0 dan berat = 1, dan untuk tombol tinggi = isi_bungkus dan berat = 0.(menyetel keduanya ke wrap_content, seperti yang dikatakan user639183, tidak akan membatasiListView
tinggi).sumber
ListView
ketinggianAnda mungkin dapat membuat ini bekerja menggunakan wadah bersarang. Mungkin saja Anda perlu membungkus Tombol dalam wadah kedua (dalam) sehingga membutuhkan lebih banyak ruang, dan cukup sejajarkan Tombol ke bagian atas wadah dalam.
Kemungkinan seperti ini:
RelativeLayout
- Tampilan Daftar
- RelativeLayout
---- Tombol
Dengan menggunakan opsi perataan yang berbeda pada dua wadah, Anda harus bisa membuatnya bekerja.
sumber
android:layout_marginTop="30dip"
untuk Tombol, jika Anda ingin lebih banyak ruang antara Daftar dan Tombol, misalnya.Ini adalah cara terbersih untuk melakukannya:
Ini mirip dengan solusi Angelos tetapi Anda tidak memerlukan linearlayout yang membungkus ListView. Anda juga dapat menggunakan FrameLayout yang lebih ringan dibandingkan dengan LinearLayout untuk membungkus Tombol.
sumber
Idenya diuraikan dalam solusi yang sangat bagus oleh:
Keduanya tampaknya bekerja dengan sempurna setidaknya di v4.4.3.
Saya masih harus meluangkan waktu menulis kode tes untuk memeriksanya dan mengonfirmasi setiap metode. Di bawah ini adalah kode tes mandiri yang diperlukan.
Tata letak didasarkan pada solusi Sparkle, karena berisi lebih sedikit tata letak bersarang. Juga telah diperbarui untuk mencerminkan pemeriksaan LINT saat ini.
Aktivitas menyediakan kode boilerplate untuk menguji solusinya sendiri.
Jangan ragu untuk menambah atau meningkatkan karena ini adalah "wiki komunitas".
sumber
Coba gunakan RelativeLayout dengan tombol di bagian bawah. Setel tinggi tata letak sebagai "wrap_content". Saya belum mencobanya. Ide saja
sumber
di LinearLayout, tambahkan saja
android:layout_weight="1"
ListView Andasumber
Berikut adalah apa yang berhasil untuk saya ...
Catatan: The params.width = ... Perlu disetel juga ...
Contoh di atas adalah ketika Anda menggunakan TableRow dan ListView di dalam TableRow ...
sumber
membungkus konten dalam tata letak linier
dalam Tampilan Daftar tambahkan: android: layout_weight = "1"
di Tombol Anda mengatur ketinggian tetap
sumber
Jika Anda ingin konten di bawah tampilan daftar bergerak ke bawah saat elemen ditambahkan ke daftar, coba solusi ini:
Tambahkan padding positif ke bagian bawah tampilan daftar dan padding negatif di bagian atas "footer". Ini akan berfungsi dalam tata letak linier atau tata letak relatif.
sumber
Karena tidak ada atribut MaxHeight, taruhan terbaik Anda adalah mengatur ketinggian ListView ke nilai yang ditetapkan, atau menggunakan
wrap_content
.sumber
Saya menyelesaikan ini dengan meletakkan ListView di dalam ScrollView. Lint tidak menyukainya, tetapi dengan menambahkan minHeight dan menyetel fillViewport ke true, saya mendapatkan hasil yang bagus.
sumber