Saya memiliki tata letak linear (berorientasi horizontal) yang berisi 3 tombol. Saya ingin 3 tombol memiliki lebar tetap dan didistribusikan secara merata di seluruh lebar tata letak linier.
Saya dapat mengatur ini dengan mengatur gravitasi linearlayout ke tengah dan kemudian menyesuaikan bantalan tombol, tetapi ini berfungsi untuk lebar tetap dan tidak akan berfungsi untuk mengubah perangkat atau orientasi.
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:gravity="center">
<Button
android:id="@+id/btnOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnThree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
</LinearLayout>
android
android-linearlayout
yamspog
sumber
sumber
Jawaban:
Memperluas jawaban fedj , jika Anda mengatur
layout_width
ke0dp
dan mengaturlayout_weight
untuk masing-masing tombol ke 1, lebar yang tersedia akan dibagi rata antara tombol.sumber
Jika Anda tidak ingin tombol untuk skala, tetapi menyesuaikan jarak antara tombol (jarak yang sama antara semua tombol), Anda dapat menggunakan tampilan dengan weight = "1" yang akan mengisi ruang antara tombol:
sumber
Space
tipe tampilan. Membuatnya lebih mudah dibaca.Anda dapat menggunakannya dengan seperti berikut ini.
sumber
Space
sampai sekarangAnda dapat melakukan ini dengan memberikan baik
View
salayout_width
dari0dp
danlayout_weight
dari1
:Cara kerja lay_weight android adalah:
match_parent
maka akan membagi ruang yang tersisa dalam rasiolayout_weight
s. Jadi jika Anda memberi Tampilanlayout_weight="2"
danlayout_weight="1"
, rasio yang dihasilkan akan 2 banding 1, yaitu: Tampilan pertama akan mendapatkan 2/3 dari ruang yang tersisa dan tampilan lainnya 1/3.Jadi itu sebabnya jika Anda memberi
layout_width
ukuran0dp
langkah pertama tidak memiliki makna tambahan karena kedua Tampilan tidak diberi spasi. Maka hanya titik kedua yang menentukan ruang masingView
- masing , sehingga memberikanView
ruang yang Anda tentukan sesuai dengan rasio!Untuk menjelaskan alasannya
0dp
menyebabkan ruang untuk dibagi rata dengan memberikan contoh yang menunjukkan yang sebaliknya: Kode di bawah ini akan menghasilkan sesuatu yang berbeda karenaexample text
sekarang memiliki lebar yang lebih besar daripada0dp
karena ituwrap_content
malah membuat ruang kosong tersisa untuk membagi kurang dari 100% karena teks membutuhkan ruang. Hasilnya adalah bahwa mereka mendapatkan 50% dari ruang kosong yang tersisa tetapi teks sudah mengambil beberapa ruang sehinggaTextView
akan memiliki lebih dari 50% dari total ruang.sumber
Nah, jika Anda memiliki tepat 3 tombol dan jika itu ok (atau bahkan direncanakan) bahwa tombol luar disejajarkan ke sisi kiri dan kanan maka Anda mungkin ingin mencoba RelativeLayout yang lebih murah (dalam banyak situasi).
Anda dapat menggunakan
layout_alignParentBottom
untuk menyelaraskan semua tombol dengan bagian bawah tata letak. Gunakanlayout_alignParentLeft and Right
untuk tombol luar danlayout_centerHorizontal
tombol tengah.Itu akan bekerja dengan baik pada berbagai orientasi dan ukuran layar.
sumber
Anda harus melihat ke atribut android: layout_weight
sumber
Solusi modern untuk ini adalah Flexbox .
Pastikan untuk mengimpor
implementation 'com.google.android:flexbox:2.0.0'
Flexbox
jauh lebih kuat; itu adalah pelengkap yang baik untukConstraintLayout
. Ini adalah sumber yang bagus untuk belajar lebih banyak.sumber
Untuk membagi dua tombol secara merata dalam tata letak linier horizontal, saya menggunakan 3 objek LinearLayout untuk bertindak sebagai ruang yang akan secara otomatis diubah ukurannya. Saya memposisikan objek LinearLayout ini sebagai berikut:
[] Tombol1 [] Tombol2 []
([] mewakili objek LinearLayout yang digunakan untuk spasi)
lalu saya mengatur masing-masing bobot objek LinearLayout ini menjadi 1, dan saya mendapatkan spasi yang sama secara merata.
Semoga ini membantu.
sumber
saya membuat Lihat DistributeLayout khusus untuk melakukan ini.
sumber
Saya sarankan Anda menggunakan atribut weightSum LinearLayout.
Menambahkan tag
android:weightSum="3"
ke deklarasi xml LinearLayout Anda dan kemudianandroid:layout_weight="1"
ke Tombol Anda akan menghasilkan 3 tombol yang didistribusikan secara merata.sumber
Ini dapat dicapai dengan menetapkan
weight
setiap tombol yang ditambahkan di dalam wadah, sangat penting untuk menentukan orientasi horisontal:jadi kita bisa mendapatkan ini di perangkat kita sebagai hasilnya:
bahkan jika kita memutar perangkat kita, yang
weight
didefinisikan di setiap tombol dapat mendistribusikan elemen secara seragam di sepanjang wadah:sumber
Pendekatan terbaik adalah dengan menggunakan TableLayout dengan android: layout_width = "match_parent" dan dalam kolom menggunakan android: layout_weight = "1" untuk semua kolom
sumber
Jawaban di atas menggunakan layout_didn't berfungsi untuk saya, tetapi yang berikut ini berhasil.
Ini adalah tampilannya di layar,
sumber
Di atas semua jawaban itu benar tetapi jika Anda membutuhkan fitur yang terlihat dan hilang maka metode pragmatis ini akan bekerja dengan baik
sumber
Sama-sama berbobot anak-anak
Agar ini berfungsi di
LinearLayout
grup tampilan nilai atribut untukandroid:layout_width
danandroid:layout_height
harus sama dengan"match_parent"
...sumber
Dalam lingkaran, Tom, Tim, dan Todd diasumsikan 3 sentimeter. Jika Anda ingin layarnya menjadi layar sentuh, letakkan sebagai Tom dan Tim yang diasumsikan 1 sentimeter, yang berarti mereka menggabungkan virtual tetapi bidang 2D-nya ada di bagian bawah. Ini ditampilkan di layar.
sumber
sumber
Cara termudah dan tercepat, (tapi bukan yang terbaik), adalah menambahkan TextView dengan atribut teks kosong, seperti ini
warna latar harus sama di LinearLayout, maka Anda bisa menggunakan properti padding, seperti ini
atau apapun yang kamu butuhkan. Berikut ini sebuah contoh.
sumber