Bir Görünümün marjını alın


95

Bir Aktiviteden bir Görünümün marj değerini nasıl alabilirim? Görünüm herhangi bir türde olabilir.

Biraz araştırdıktan sonra, bir görünümün dolgusunu almanın yollarını buldum, ancak Margin'de hiçbir şey bulamadım. Biri yardım edebilir mi?

Bunun gibi bir şey denedim

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

Bu işe yarıyor, ancak yukarıdaki kodda görünümün bir LinearLayout. Ancak margingörünüm türünü bilmesem bile özniteliği almam gerekiyor .

Yanıtlar:


180

bunu dene:

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

kenar boşluklarına şu yolla erişilebilir:

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

düzenleme: belki ViewGroup.MarginLayoutParamssizin için çalışacaktır. Diğerleri için temel bir sınıftır LayoutParams.

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

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


7
Aslında bunun gibi bir şey bekliyordum ama doğrudan bir sınıf olduğunu sanmıyorum LayoutParams. Gibi sınıflar vardır FrameLayout.LayoutParams, RelativeLayout.LayoutParamsgibi, ama hiçbir şey LayoutParamskendi içinde. Ve görüşün türünü bilmediğim için, eski sınıfların hiçbirini kullanamıyorum.
Arnab Chakraborty

5
peki ya ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();o zaman?
Vladimir

ViewGroup.MarginLayoutParams olmalıdır lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
rockhammer


4

şimdi bu düzenlenmiş kodu kullanın. Bu sana yardım edecek

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

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin

Bahsettiğiniz yöntemler görünümün sol, sağ, üst ve alt konumlarını veriyor, kenar boşluklarına ihtiyacım var.
Arnab Chakraborty

Şart değil. Görünüm, belki yerleştirilmiş LinearLayoutolan horizontalyönelim. Düzendeki ikinci görünüm ise, view.getLeft()yöntem bana solunun koordinatını verir, ancak bitişik görünümünden görünümün sol kenar boşluğunu verir.
Arnab Chakraborty

Ya Görünüm bir ise LinearLayout?
Arnab Chakraborty

3

Diğerlerinin önerdiği gibi layout_margin #, ebeveynin # kenarı ile sizin görünümünüz arasındaki boşluktur.

  • # "Sol", "Sağ", "Üst" veya "Alt" ın yerini alır

Kenar boşluklarını almak / ayarlamak benim için çalıştı:

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

Tabii ki, Benim Görünümüm gerçekten de bir Görünüm Grubuydu ve ebeveyn de bir Görünüm Grubuydu. Çoğu durumda, mizanpaj parametrelerinizi ebeveynin View sınıfına (bu durumda ViewGroup ve RelativeLayout) çevirmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.