Pertanyaan saya sederhana,
Bagaimana cara mengatur tombol lay_gravity saya secara terprogram?
Saya menemukan ini di internet, tetapi itu hanya membuat saya pengecualian Nullpointer:
Button MyButton = new Button(this);
LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
lllp.gravity=Gravity.RIGHT;
MyButton.setLayoutParams(lllp);
MyLinearLayout.addView(MyButton);
Ada solusi?
android
android-layout
Adam Varhegyi
sumber
sumber
Jawaban:
Jawa
Kotlin
Untuk nilai-nilai gravitasi dan cara mengatur gravitasi, periksa Gravity .
Pada dasarnya, Anda harus memilih
LayoutParams
tergantung pada orang tua. Bisa jadiRelativeLayout
,LinearLayout
dll ...sumber
layout_gravity
(yaituLayoutParams.gravity
). Yanggravity
akan menjadibutton.setGravity()
setGravity()
adalah layout_gravity, tetapi ini salah. Saya dapat menyetujui bahwa jawaban ini benar untuk pengaturan layout_gravity secara terprogram.Saya benci untuk menghidupkan kembali utas lama tapi ini adalah masalah yang tidak dijawab dengan benar dan terlebih lagi saya telah mengalami masalah ini sendiri.
Inilah sedikit panjangnya, jika Anda hanya tertarik pada jawabannya, silakan gulir sepenuhnya ke kode:
android: gravity dan android: layout_gravity bekerja secara berbeda. Inilah artikel yang saya baca yang membantu saya.
GIST artikel: gravitasi mempengaruhi tampilan setelah tinggi / lebar ditetapkan. Jadi pusat gravitasi tidak akan memengaruhi tampilan yang dilakukan FILL_PARENT (anggap saja sebagai margin otomatis). layout_gravity center AKAN memengaruhi tampilan yang FILL_PARENT (anggap saja sebagai pad otomatis).
Pada dasarnya, android: layout_gravity TIDAK BISA mengakses program, hanya android: gravitasi. Dalam kasus OP dan kasus saya, jawaban yang diterima tidak menempatkan tombol di tengah secara vertikal.
Untuk meningkatkan jawaban Karthi:
Tautan ke
LinearLayout.LayoutParams
.android: layout_gravity menunjukkan "Tidak ada metode terkait" yang berarti tidak dapat diakses secara programatik. Sedangkan gravitasi adalah bidang di kelas.
sumber
Untuk layout_gravity gunakan jawaban yang dinyatakan oleh "karthi". Metode ini mengatur gravitasi untuk menempatkan anak-anak di dalam tampilan.
sumber
Saya memiliki masalah yang sama dengan pengaturan secara layout_gravity pada tombol di GridLayout.
Caranya adalah dengan mengatur gravitasi pada tata letak tombol. SETELAH tombol ditambahkan ke induk (GridLayout), jika tidak gravitasi akan diabaikan .
sumber
Jika Anda ingin mengubah tampilan
layou_gravity
yang ada lakukan ini:Ingatlah untuk menggunakan hak
LayoutParams
berdasarkan tipe Layout tampilan Anda. Contoh:sumber
gunakan ini untuk menambahkan lebih dari satu gravitasi
sumber
Pertanyaan ini sudah lama tetapi saya hanya memiliki masalah yang sama dan menyelesaikannya seperti ini
sumber
Pengaturan KOTLIN lebih dari satu gravitasi di FrameLayout tanpa mengubah ukuran:
sumber
Saya menggunakan sesuatu seperti itu: (kode Xamarin dan C #)
SetGravity menempatkan textView saya di tengah tata letak. Jadi properti tata letak SetGravity merujuk ke konten tata letak
sumber
Jika Anda perlu mengatur Gravity for a View gunakan yang berikut ini
Untuk mengatur layout_gravity untuk Tombol gunakan bidang gravitasi untuk tata letakparam sebagai
coba ini harapan ini jelas terima kasih
sumber
Jawabannya benar, saya ingin menambahkan lebih banyak penjelasan. Layout_gravity adalah tentang bagaimana memposisikan tampilan dalam tampilan induk.
Anda harus mengatur gravitasi ** setelah metode parentView.addView () ** dipanggil. Kita dapat melihat kodenya:
Dan masalah dari null pointer adalah karena ia tidak memanggil addView sebelum getLayoutParams ().
Anotasi itu sudah mengatakan "Metode ini dapat mengembalikan nol jika Tampilan ini tidak dilampirkan ke induk ViewGroup atau {@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)} tidak dipanggil dengan sukses. Ketika sebuah Tampilan dilampirkan pada orangtua ViewGroup, metode ini tidak boleh mengembalikan null. "
sumber
Jika Anda ingin meletakkan tampilan di tengah orang tua, Anda dapat melakukannya dengan kode berikut ..
bagian kode ini membuat LinearLayout menempatkan elemen tampilan pertama di pusat induk. Jadi, kami sistem tidak mempertimbangkan lebar awal dan tinggi untuk mengatur tampilan di tengah. Saya melakukan bagian kode dengan baik.
sumber
ke RelativeLayout, coba kode ini, itu berfungsi untuk saya:
yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
sumber
Bekerja dengan sempurna !!! Tidak ada jawaban di atas yang berfungsi untuk saya. Dalam pengaturan file Xml gravitasi dan pengaturan layout_gravity berbeda. Lihatlah kode di bawah ini
Periksa juga ini, di mana Anda dapat menemukan penjelasan yang jelas tentang gravitasi dan layout_gravity.
sumber
Sebagian besar jawaban di atas benar, jadi tuliskan metode pembantu, sehingga Anda dapat menggunakannya langsung di proyek Anda.
sumber
Saya beralih dari LinearLayout.LayoutParams ke RelativeLayout.LayoutParams untuk akhirnya mendapatkan hasil yang saya inginkan pada circleview kustom yang saya buat.
Tetapi alih-alih gravitasi Anda menggunakan addRule
RelativeLayout.LayoutParams mCircleParams = new RelativeLayout.LayoutParams (circleheight, circleheight);
sumber
Coba kode ini
atau
sumber
layout_gravity
tidakgravitiy
.sumber
sumber