Saya mencoba mencapai hal-hal berikut secara terprogram (daripada secara deklaratif melalui XML):
<RelativeLayout...>
<TextView ...
android:id="@+id/label1" />
<TextView ...
android:id="@+id/label2"
android:layout_below: "@id/label1" />
</RelativeLayout>
Dengan kata lain, bagaimana cara membuat yang kedua TextView
muncul di bawah yang pertama, tetapi saya ingin melakukannya dalam kode:
RelativeLayout layout = new RelativeLayout(this);
TextView label1 = new TextView(this);
TextView label2 = new TextView(this);
...
layout.addView(label1);
layout.addView(label2);
setContentView(layout);
Memperbarui:
Terima kasih, TreeUK. Saya mengerti arah umum, tetapi masih tidak berhasil - "B" tumpang tindih "A". Apa yang saya lakukan salah?
RelativeLayout layout = new RelativeLayout(this);
TextView tv1 = new TextView(this);
tv1.setText("A");
TextView tv2 = new TextView(this);
tv2.setText("B");
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT);
lp.addRule(RelativeLayout.RIGHT_OF, tv1.getId());
layout.addView(tv1);
layout.addView(tv2, lp);
Jawaban:
Dari apa yang saya dapat kumpulkan, Anda harus menambahkan tampilan menggunakan LayoutParams.
Semua kredit untuk sechastain, untuk relatif memposisikan item Anda secara terprogram Anda harus menetapkan id untuk mereka.
Kemudian
addRule(RelativeLayout.RIGHT_OF, tv1.getId());
sumber
below
telah ditambahkan, bagaimana memastikan masih membuat benar? Dari pemahaman sayaaddView
menyebabkan tata letak untuk dirender ulang, jadi jika saya melakukannya untuk item yang relatif belum ditambahkan, itu akan macet karena item dengan ID itu belum ada.Singkat cerita: Dengan tata letak relatif Anda memposisikan elemen di dalam tata letak.
buat RelativeLayout.LayoutParams baru
(apa pun ... isi induk atau bungkus konten, angka absolut jika Anda harus, atau referensi ke sumber daya XML)
Tambahkan aturan: Aturan merujuk ke orang tua atau "saudara" lainnya dalam hierarki.
Cukup terapkan tata letak params: Cara yang paling 'sehat' untuk melakukannya adalah:
Awas : Jangan mengubah tata letak dari tata letak panggilan balik. Sangat menggoda untuk melakukannya karena ini adalah saat tampilan mendapatkan ukuran sebenarnya. Namun, dalam hal itu, hasil yang tidak diharapkan diharapkan.
sumber
parentLayout.addView(myView, lp
). Saya selalu melakukan itu dalam dua baris kode. Terima kasih!Hanya menghabiskan 4 jam dengan masalah ini. Akhirnya menyadari bahwa Anda tidak boleh menggunakan nol sebagai id tampilan . Anda akan berpikir bahwa itu diizinkan sebagai NO_ID == -1, tetapi banyak hal cenderung menjadi berantakan jika Anda memberikannya pada pandangan Anda ...
sumber
Android 22 contoh runnable minimal
Sumber:
Bekerja dengan proyek default yang dihasilkan oleh
android create project ...
. Repositori GitHub dengan kode build minimal .sumber
TextView
? Saya mencoba dan yang ketigaTextView
hilang.panggilan
setelah
sumber
Mencoba:
sumber
Pendekatan ini dengan ViewGroup.MarginLayoutParams bekerja untuk saya:
sumber
sumber
Jika Anda benar-benar ingin tata letak secara manual, saya sarankan untuk tidak menggunakan tata letak standar sama sekali. Lakukan semuanya sendiri, ini contoh kotlin:
Ini mungkin memberi Anda gambaran bagaimana ini bisa berhasil
sumber