Dapatkan margin Tampilan

95

Bagaimana saya bisa mendapatkan nilai margin dari sebuah View dari sebuah Aktivitas? Tampilan dapat berupa jenis apa pun.

Setelah sedikit mencari, saya menemukan cara untuk mendapatkan padding tampilan, tetapi tidak dapat menemukan apa pun di Margin. Adakah yang bisa membantu?

Saya mencoba sesuatu seperti ini,

ViewGroup.LayoutParams vlp = view.getLayoutParams();
int marginBottom = ((LinearLayout.LayoutParams) vlp).bottomMargin;

Ini berfungsi, tetapi dalam kode di atas saya mengasumsikan tampilan menjadi a LinearLayout. Tapi saya perlu mendapatkan marginatribut bahkan ketika saya tidak tahu tipe tampilan.

Arnab Chakraborty
sumber

Jawaban:

180

coba ini:

View view = findViewById(...) //or however you need it
LayoutParams lp = (LayoutParams) view.getLayoutParams();

margin dapat diakses melalui

lp.leftMargin;
lp.rightMargin;
lp.topMargin;
lp.bottomMargin;

edit: mungkin ViewGroup.MarginLayoutParamsakan berhasil untuk Anda. Ini kelas dasar untuk yang lain LayoutParams.

ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();

http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

Vladimir
sumber
7
Sebenarnya saya mengharapkan sesuatu seperti ini, tetapi saya rasa tidak ada kelas langsung yang dipanggil LayoutParams. Ada kelas seperti FrameLayout.LayoutParams, RelativeLayout.LayoutParams, tapi tidak seperti LayoutParamsdalam dirinya sendiri. Dan karena saya tidak tahu jenis tampilan, saya tidak dapat menggunakan kelas sebelumnya.
Arnab Chakraborty
5
apa tentang ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();itu?
Vladimir
Harus ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
rockhammer
4

sekarang gunakan kode yang diedit ini. ini akan membantumu

FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)mainLayout.getLayoutParams();

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin
ilango j
sumber
Metode yang Anda sebutkan memberikan posisi tampilan kiri, kanan, atas dan bawah, saya membutuhkan margin.
Arnab Chakraborty
Belum tentu. Tampilan mungkin ditempatkan LinearLayoutdengan horizontalorientasi. Jika ini adalah tampilan kedua dalam tata letak, view.getLeft()metode ini akan memberi saya koordinat kiri tetapi margin kiri tampilan dari tampilan yang berdekatan.
Arnab Chakraborty
Bagaimana jika View adalah a LinearLayout?
Arnab Chakraborty
3

Seperti yang disarankan orang lain, layout_margin # adalah spasi antara tepi # induk dan tampilan Anda.

  • # menggantikan "Kiri", "Kanan", "Atas" atau "Bawah"

Mendapatkan / mengatur margin berhasil untuk saya dengan:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams();
params.topMargin += 20;
mView.requestLayout();

Tentu saja, Tampilan saya memang ViewGroup dan induknya adalah ViewGroup juga. Dalam kebanyakan kasus, Anda harus mentransmisikan parameter layout Anda ke kelas View LayoutParams orang tua (dalam hal ini adalah ViewGroup dan RelativeLayout)

milosmns
sumber