Lihat punyaminHeight
tapi entah bagaimana kurang maxHeight
:
Yang ingin saya capai adalah mengisi beberapa item (tampilan) ScrollView
. Ketika ada 1..3 item yang ingin saya tampilkan secara langsung. Berarti ScrollView
memiliki ketinggian 1, 2 atau 3 item.
Ketika ada 4 atau lebih item yang saya ingin ScrollView
berhenti berkembang (jadi a maxHeight
) dan mulai menyediakan scrolling.
Namun, sayangnya tidak ada cara untuk mengatur maxHeight
. Jadi saya mungkin harus mengatur ScrollView
tinggi badan saya secara terprogram baik WRAP_CONTENT
ketika ada 1..3 item dan mengatur ketinggian 3*sizeOf(View)
ketika ada 4 atau lebih item.
Adakah yang bisa menjelaskan mengapa tidak ada yang maxHeight
disediakan, padahal sudah ada minHeight
?
(BTW: beberapa tampilan, seperti ImageView
telah maxHeight
diterapkan.)
Jawaban:
Tak satu pun dari solusi ini bekerja untuk apa yang saya butuhkan yaitu set ScrollView untuk wrap_content tetapi memiliki maxHeight sehingga akan berhenti berkembang setelah titik tertentu dan mulai menggulir. Saya hanya cukup mengesampingkan metode onMeasure di ScrollView.
Ini mungkin tidak berfungsi di semua situasi, tetapi tentu saja memberi saya hasil yang diperlukan untuk tata letak saya. Dan itu juga membahas komentar oleh madhu.
sumber
Untuk membuat
ScrollView
atauListView
dengan maxHeight, Anda hanya perlu membuat LinearLayout transparan di sekitarnya dengan ketinggian yang Anda inginkan dengan maxHeight. Anda kemudian mengatur Tinggi ScrollView kewrap_content
. Ini menciptakan ScrollView yang tampaknya tumbuh sampai tingginya sama dengan induknya LinearLayout.sumber
Ini berfungsi agar saya dapat dikustomisasi dalam xml:
MaxHeightScrollView.java:
attr.xml
tata letak contoh
sumber
(Saya tahu ini tidak langsung menjawab pertanyaan tetapi mungkin bermanfaat bagi orang lain yang mencari fungsionalitas maxHeight)
ConstraintLayout menawarkan tinggi maksimum untuk anak-anaknya via
atau
Contoh penggunaan di sini .
sumber
Saya akan mengomentari jawaban whizzle jika saya bisa, tetapi saya pikir ini berguna untuk mencatat bahwa agar saya dapat menyelesaikan masalah ini dalam konteks mode multi-jendela di Android N, saya perlu mengubah sedikit kode untuk ini:
Ini memungkinkan tata letak untuk mengubah ukuran menjadi lebih kecil dari ketinggian maks, tetapi juga mencegahnya agar tidak lebih besar dari ketinggian maks. Saya menggunakan ini adalah kelas tata letak yang Overrides
RelativeLayout
dan ini memungkinkan saya untuk membuat dialog khusus denganScrollView
sebagai anakMaxHeightRelativeLayout
yang tidak memperluas ketinggian penuh layar dan juga menyusut agar sesuai dengan ukuran janda terkecil di multi-jendela untuk Android N.sumber
Tidak ada cara untuk mengatur maxHeight. Tapi Anda bisa mengatur Tinggi.
Untuk melakukan itu, Anda perlu menemukan ketinggian setiap item Anda scrollView. Setelah itu cukup atur tinggi scrollView Anda ke numberOfItens * heightOfItem.
Untuk menemukan ketinggian item, lakukan itu:
Untuk mengatur ketinggian lakukan itu:
sumber
Membungkus Anda di
ScrollView
sekitar dataran AndaLinearLayout
dengan layout_height = "max_height", ini akan melakukan pekerjaan dengan sempurna. Sebenarnya, saya memiliki kode ini dalam produksi dari 5 tahun terakhir dengan nol masalah.sumber
MaxHeightScrollView
Tampilan kustom sayastyle.xml
Menggunakan
sumber
Saya punya jawaban di sini:
https://stackoverflow.com/a/29178364/1148784
Cukup buat kelas baru dengan memperluas ScrollView dan timpa
onMeasure
metode itu.sumber
Seperti yang disebutkan di atas, ConstraintLayout menawarkan tinggi maksimum untuk anak-anaknya melalui:
Selain itu, jika tinggi maksimum untuk satu anak ConstraintLayout tidak pasti hingga Aplikasi berjalan, masih ada cara untuk membuat anak ini secara otomatis menyesuaikan ketinggian yang bisa berubah di mana pun ia ditempatkan dalam rantai vertikal.
Sebagai contoh, kita perlu memperlihatkan dialog bawah dengan header TextView yang dapat diubah, ScrollView yang bisa berubah, dan footer yang bisa diubah TextView. Tinggi maks dialog adalah 320dp , ketika tinggi total tidak mencapai 320dp ScrollView bertindak sebagai wrap_content, ketika tinggi total melebihi ScrollView bertindak sebagai "maxHeight = 320dp - tinggi header - tinggi footer".
Kita dapat mencapai ini hanya melalui file layout xml:
Sebagian besar kode impor pendek:
Penggunaan horisontal maxWidth cukup sama.
sumber
Sudahkah Anda mencoba menggunakan nilai layout_weight ? Jika Anda menetapkan satu ke nilai lebih besar dari 0, itu akan meregangkan pandangan itu ke dalam ruang yang tersisa yang tersedia.
Jika Anda memiliki beberapa tampilan yang perlu diregangkan, maka nilainya akan menjadi beban di antara keduanya.
Jadi jika Anda memiliki dua tampilan, keduanya diatur ke nilai layout_weight dari 1, maka keduanya akan meregangkan untuk mengisi ruang, tetapi keduanya akan membentang ke jumlah ruang yang sama. Jika Anda menetapkan salah satu dari mereka ke nilai 2, maka itu akan meregangkan dua kali lipat dari pandangan lainnya.
Beberapa info lebih lanjut di sini tercantum di bawah Layout Linear.
sumber
maxHeight
yang saya dapat mengatur ke nilai penurunan tertentu. (Saya akhirnya selesai menghitung dan mengatur ketinggian secara programatis)saya pikir Anda dapat mengatur heiht saat runtime untuk 1 item saja
scrollView.setHeight(200px)
, untuk 2 itemscrollView.setheight(400px)
untuk 3 atau lebihscrollView.setHeight(600px)
sumber
Seperti yang kita ketahui perangkat yang menjalankan Android dapat memiliki ukuran layar yang berbeda. Seperti yang kita ketahui lebih lanjut pandangan harus menyesuaikan secara dinamis dan menjadi ruang yang sesuai.
Jika Anda mengatur ketinggian maksimal, Anda mungkin memaksakan pandangan untuk tidak mendapatkan ruang yang cukup atau mengambil ruang lebih sedikit. Saya tahu bahwa kadang-kadang tampaknya praktis untuk mengatur ketinggian maksimal. Tetapi jika resolusi akan pernah berubah secara dramatis, dan itu akan !, maka tampilan, yang memiliki ketinggian maksimal, akan terlihat tidak sesuai.
Saya pikir tidak ada cara yang tepat untuk melakukan tata letak yang Anda inginkan. saya akan merekomendasikan Anda untuk memikirkan tata letak Anda menggunakan manajer tata letak dan mekanisme relatif. saya tidak tahu apa yang ingin Anda capai tetapi kedengarannya agak aneh bagi saya bahwa daftar hanya menampilkan tiga item dan kemudian pengguna harus menggulir.
btw. minHeight tidak dijamin (dan mungkin juga seharusnya tidak ada). itu dapat memiliki beberapa manfaat untuk memaksa item agar terlihat sementara item relatif lainnya menjadi lebih kecil.
sumber
Jika ada yang mempertimbangkan untuk menggunakan nilai tepat untuk LayoutParams misalnya
Jangan lupa untuk mempertimbangkan kepadatan tampilan perangkat jika tidak Anda mungkin mendapatkan perilaku yang sangat aneh pada perangkat yang berbeda. Misalnya:
sumber
Pertama, dapatkan tinggi item dalam piksel
maka sederhananya
sumber
jika kalian ingin membuat scrollview atau listview non-overflow, tetapi hanya pada RelativeLayout dengan topview dan bottomview di atas dan bawah untuk itu:
sumber
Saya menggunakan ScrollView khusus yang dibuat di Kotlin yang menggunakan
maxHeight
. Contoh penggunaan:Berikut adalah kode dari
ScrollViewWidthMaxHeight
:yang juga membutuhkan deklarasi ini dalam
values/attrs.xml
:sumber