Saya mencoba menggunakan Java ( bukan XML ) untuk membuat LinearLayout dengan tombol yang mengisi layar, dan memiliki margin. Berikut adalah kode yang berfungsi tanpa margin:
LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
for (int r = 0; r < 6; ++r) {
Button btn = new Button(this);
btn.setText("A");
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
lp.weight = 1.0f; // This is critical. Doesn't work without it.
buttonsView.addView(btn, lp);
}
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setContentView(buttonsView, lp);
Jadi itu berfungsi dengan baik, tapi bagaimana Anda memberi Anda margin tombol sehingga ada ruang di antara mereka? Saya mencoba menggunakan LinearLayout.MarginLayoutParams
, tetapi itu tidak memiliki weight
anggota sehingga tidak baik. Dan itu tidak berfungsi jika Anda memasukkannya lp
dalam konstruktornya juga.
Apakah ini tidak mungkin? Karena sudah pasti terlihat, dan itu bukan tugas tata letak Android pertama yang hanya dapat Anda lakukan dalam XML.
Jawaban:
Berikut adalah sedikit kode untuk mencapainya:
sumber
Anda menelepon
setMargins()
padaLinearLayout.LayoutParams
objek.LinearLayout.LayoutParams
adalah subkelas dariLinearLayout.MarginLayoutParams
, sebagaimana ditunjukkan dalam dokumentasi .Tidak.
Anda dipersilakan untuk memberikan bukti klaim ini.
Secara pribadi, saya tidak mengetahui apa pun yang hanya dapat dicapai melalui XML dan tidak melalui metode Java di SDK. Bahkan, menurut definisi, semuanya harus bisa dilakukan melalui Java (walaupun tidak harus melalui metode SDK-reachable), karena XML bukan kode yang dapat dieksekusi. Tetapi, jika Anda mengetahui sesuatu, tunjukkan, karena itu adalah bug di SDK yang harus diperbaiki suatu hari nanti.
sumber
LayoutPararms
. Saya suka gaya ... ya, well, ada alasan saya tidak menggunakannya. :-)Untuk menambahkan margin secara langsung ke item (beberapa item memungkinkan pengeditan margin secara langsung), Anda dapat melakukan:
... ini berfungsi tanpa perlu tahu tentang / mengedit tata letak di sekitarnya. Perhatikan cek "instanceof" jika Anda mencoba dan menjalankan ini terhadap sesuatu yang tidak mendukung margin.
sumber
Karena variasi dalam kerapatan piksel layar perangkat, ada baiknya untuk selalu menggunakan
DIP
unit untuk mengatur margin secara terprogram. Seperti di bawah ini_Semoga ini bisa membantu.
sumber
Saya telah mengatur margin secara langsung menggunakan kode di bawah ini
Satu-satunya hal di sini adalah pemberitahuan yang
LayoutParams
harus diimpor untuk paket berikutandroid.widget.RelativeLayout.LayoutParams
, atau ada kesalahan.sumber
Coba ini
sumber
sumber
Coba ini:
sumber
Anda harus mengetahui jenis viewGroup view.Pada kode di atas, misalnya, saya ingin mengubah margin frameLayout, dan grup view frameLayout adalah RelativeLayout, jadi Anda perlu untuk menyamar menjadi (RelativeLayout.LayoutParams)
sumber
Di sini Solusi satu baris:
sumber