Saya tidak mengerti cara menggunakan atribut ini. Adakah yang bisa menceritakan lebih banyak tentang hal itu kepada saya?
650
Saya tidak mengerti cara menggunakan atribut ini. Adakah yang bisa menceritakan lebih banyak tentang hal itu kepada saya?
Dengan layout_weight
Anda dapat menentukan rasio ukuran antara beberapa tampilan. Misalnya Anda memiliki MapView
dan table
yang harus menunjukkan beberapa informasi tambahan ke peta. Peta harus menggunakan 3/4 layar dan tabel harus menggunakan 1/4 layar. Kemudian Anda akan mengatur layout_weight
the map
ke 3 dan layout_weight
thetable
ke 1.
Untuk membuatnya berfungsi, Anda juga harus mengatur tinggi atau lebar (tergantung pada orientasi Anda) ke 0px.
Singkatnya,
layout_weight
tentukan berapa banyak ruang ekstra dalam tata letak yang akan dialokasikan untuk tampilan.LinearLayout mendukung penetapan bobot untuk masing-masing anak. Atribut ini memberikan nilai "pentingnya" ke tampilan, dan memungkinkannya berkembang untuk mengisi ruang yang tersisa di tampilan induk. Berat default tampilan adalah nol.
Perhitungan untuk menetapkan sisa ruang antara anak
Secara umum, rumusnya adalah:
Contoh 1
Jika ada tiga kotak teks dan dua di antaranya menyatakan bobot 1, sedangkan yang ketiga tidak diberi bobot (0), maka ruang yang tersisa ditetapkan sebagai berikut:
Contoh 2
Katakanlah kita memiliki label teks dan dua elemen edit teks dalam satu baris horizontal. Label tidak
layout_weight
ditentukan, sehingga membutuhkan ruang minimum yang diperlukan untuk merender. Jikalayout_weight
masing-masing dari dua elemen edit teks diatur ke 1, lebar yang tersisa di tata letak induk akan dibagi sama rata di antara mereka (karena kami mengklaim mereka sama pentingnya).Perhitungan:
Sebaliknya, jika kotak teks yang pertama memiliki angka
layout_weight
1, dan kotak teks yang kedua memiliki alayout_weight
2, maka sepertiga dari ruang yang tersisa akan diberikan kepada yang pertama, dan dua pertiga untuk yang kedua (karena kami mengklaim yang kedua satu lebih penting).Perhitungan:
Artikel sumber
sumber
android:layout_width="0px"
ini penting. Juga, bobot tidak harus bilangan bulat.weightSum
datang ke gambar itu? Apakah ada hubungannya denganlayout_weight
?menambahkan ke jawaban lain, hal yang paling penting untuk mendapatkan ini berfungsi adalah mengatur lebar tata letak (atau tinggi) ke 0px
jika tidak, Anda akan melihat sampah
sumber
Jika ada beberapa tampilan yang mencakup a
LinearLayout
, makalayout_weight
berikan masing-masing ukuran proporsional. Tampilan denganlayout_weight
nilai lebih besar "lebih berat" lebih banyak, sehingga mendapat ruang yang lebih besar.Berikut ini adalah gambar untuk membuat segalanya lebih jelas.
Teori
Berat tata letak istilah terkait dengan konsep rata-rata tertimbang dalam matematika. Ini seperti di kelas perguruan tinggi di mana pekerjaan rumah bernilai 30%, kehadiran bernilai 10%, ujian tengah semester bernilai 20%, dan final bernilai 40%. Skor Anda untuk bagian-bagian itu, ketika ditimbang bersama, memberi Anda nilai total Anda.
Sama untuk bobot tata letak. Dalam
Views
horizontalLinearLayout
masing-masing dapat mengambil persentase tertentu dari total lebar. (Atau persentase tinggi untuk vertikalLinearLayout
.)Tata Letak
Yang
LinearLayout
Anda gunakan akan terlihat seperti ini:Perhatikan bahwa Anda harus menggunakan
layout_width="match_parent"
untukLinearLayout
. Jika Anda menggunakanwrap_content
, maka itu tidak akan berhasil. Perhatikan juga bahwalayout_weight
tidak berfungsi untuk tampilan di RelativeLayouts (lihat di sini dan di sini untuk jawaban SO yang berurusan dengan masalah ini).Pemandangan
Setiap tampilan dalam horizontal
LinearLayout
terlihat seperti ini:Perhatikan bahwa Anda harus menggunakannya
layout_width="0dp"
bersamalayout_weight="1"
. Lupa ini menyebabkan banyak masalah pengguna baru. (Lihat artikel ini untuk hasil berbeda yang bisa Anda peroleh dengan tidak mengatur lebar ke 0.) Jika pandangan Anda dalam bentuk vertikalLinearLayout
maka Anda akan menggunakanlayout_height="0dp"
, tentu saja.Dalam
Button
contoh di atas saya mengatur bobot ke 1, tetapi Anda dapat menggunakan nomor apa pun. Hanya total yang penting. Anda dapat melihat di tiga baris tombol pada gambar pertama yang saya posting, angkanya semua berbeda, tetapi karena proporsinya sama, lebar tertimbang tidak berubah di setiap baris. Beberapa orang suka menggunakan angka desimal yang memiliki jumlah 1 sehingga dalam tata letak yang kompleks jelas berapa berat setiap bagian.Satu catatan terakhir. Jika Anda memiliki banyak tata letak bersarang yang digunakan
layout_weight
, itu bisa berakibat buruk untuk kinerja.Tambahan
Berikut adalah tata letak xml untuk gambar atas:
sumber
layout_weight
memberi tahu Android cara mendistribusikanView
file Anda di aLinearLayout
. Android kemudian pertama-tama menghitung proporsi total yang diperlukan untuk semuaView
yang memiliki bobot yang ditentukan dan menempatkan masing-masingView
sesuai dengan fraksi layar yang telah ditentukan yang dibutuhkannya. Pada contoh berikut, Android melihat bahwaTextView
s memilikilayout_weight
dari0
(ini adalah default) danEditText
s memilikilayout_weight
dari2
masing-masing, sementaraButton
memiliki berat1
. Jadi Android mengalokasikan ruang 'cukup' untuk ditampilkantvUsername
dantvPassword
kemudian membagi sisa lebar layar menjadi 5 bagian yang sama, dua di antaranya dialokasikan untuketUsername
, dua keetPassword
dan bagian terakhir untukbLogin
:Sepertinya:
dan
sumber
Pikirkan seperti itu, akan lebih sederhana
Jika Anda memiliki 3 tombol dan bobotnya adalah 1,3,1, itu akan berfungsi seperti tabel dalam HTML
Berikan 5 bagian untuk baris itu: 1 bagian untuk tombol 1, 3 bagian untuk tombol 2 dan 1 bagian untuk tombol 1
Menganggap,
sumber
salah satu penjelasan terbaik untuk saya adalah yang ini (dari tutorial Android, lihat langkah 7) :
sumber
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
Layout_weight mendefinisikan berapa banyak ruang yang harus diperoleh kontrol masing-masing untuk kontrol lain.
sumber
Untuk tambahan :
Untuk
vertical
orientasi, jangan lupa aturheight
ke 0dpUntuk
horizontal
orientasi, jangan lupa aturwidth
ke 0dpsumber
Silakan lihat weightSum of LinearLayout dan layout_weight dari setiap View. android: weightSum = "4" android: layout_weight = "2" android: layout_weight = "2" Layout_height keduanya 0px, tapi saya tidak yakin itu relevan
sumber
Menggabungkan kedua jawaban dari
Flo & rptwsthi dan roetzi,
Jangan lupa untuk mengubah Anda
layout_width=0dp/px
, kalau tidaklayout_weight
perilaku akan bertindak terbalik dengan jumlah terbesar menempati ruang terkecil dan jumlah terendah menempati ruang terbesar.Selain itu, beberapa kombinasi bobot akan menyebabkan beberapa tata letak tidak dapat ditampilkan (karena melebihi ruang).
Waspadai ini.
sumber
Menambahkan
android:autoSizeTextType="uniform"
akan mengubah ukuran teks untuk Anda secara otomatissumber
Seperti namanya, bobot Tata Letak menentukan jumlah atau persentase ruang mana bidang atau widget tertentu harus menempati ruang layar.
Jika kita menentukan bobot dalam orientasi horizontal, maka kita harus menentukan
layout_width = 0px
.Demikian pula, Jika kita menentukan berat dalam orientasi vertikal, maka kita harus menentukan
layout_height = 0px
.sumber