Android, nasıl dp programlı kenar boşlukları ayarlarım
this, this this iplik tek bir görünümde kenar boşluklarını ayarlamak için nasıl bir cevap bulmaya çalıştım. Ancak, eğer daha kolay bir yol değil eğer mi var merak ettim. Ben daha çok bu yaklaşımı kullanmak istemem neden açıklayacağım:
Düğme uzanan özel bir Düğme var. Eğer arka plan varsayılan arka plan (setBackgroundResource(int id)
setBackgroundDrawable(Drawable d)
arayarak) daha başka bir şey ayarlı ise, kenar boşluklarını 0 olmasını istiyorum. Bu çağırsam:
public void setBackgroundToDefault() {
backgroundIsDefault = true;
super.setBackgroundResource(android.R.drawable.btn_default);
// Set margins somehow
}
İstediğim kenar boşluklarını sıfırlamak -3dp (zaten okumak here nasıl piksel dönüştürmek için dp, bu kez biliyorum nasıl ayarlanır kenar px halledebilirim kendim). Ama bu CustomButton
sınıfta denir, çünkü üst LinearLayout gelen TableLayout değişebilir, ve daha doğrusu onun üst almak ve örneğin üst kontrol ederdim. Bu da oldukça inperformant olacak sanırım.
Ayrıca, ne zaman arama (kullanarak LayoutParams) parentLayout.addView(myCustomButton, newParams)
, bilmiyorum, eğer bu ekler doğru pozisyon (denemedim ancak), ortada ki tuşa bir satır beş.
Soru: daha kolay bir yolu var tek bir Düğme programlı marjı ayarlamak için vardırkullanmanın yanı sıra LayoutParams?
Şimdiden teşekkürler.
Bu LayoutParams yolu biliyorum, ama her biri farklı kap tipi işleme kaçınan bir çözüm istiyorum: EDİT:
ViewGroup.LayoutParams p = this.getLayoutParams();
if (p instanceof LinearLayout.LayoutParams) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
else if (p instanceof RelativeLayout.LayoutParams) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
else if (p instanceof TableRow.LayoutParams) {
TableRow.LayoutParams lp = (TableRow.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
}
this.getLayoutParams();
çünkü döndürür*, , *, *15bottomMargin
*14 12**öznitelikleri olmayan ViewGroup.LayoutParams
, .
Mc örneğini gördüğünüz sadece bir MarginContainer
içeren ofset (-3dp) kenar boşlukları ve (oml, maliyeti, grup, omb) ve orijinal kenar boşlukları (ml, Bay, mt, mb).
CEVAP
LayoutParams
düğme kenar boşluklarını ayarlamak için kullanmanız gerekir:
LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
);
params.setMargins(left, top, right, bottom);
yourbutton.setLayoutParams(params);
Sizin kullandığınız ne bağlı olarak RelativeLayout.LayoutParams
LinearLayout.LayoutParams
kullanmalıdır.
Ve dp, önlem piksel dönüştürmek için, bu deneyin:
Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
yourdpmeasure,
r.getDisplayMetrics()
);
Nasıl programlı olarak Android içinde ...
Android: Görünüm.KİMLİK çatışmaları ön...
Bir LinearLayout ayarlanmış kenar boşl...
Nasıl kamera ışığını açmak programlı o...
Nasıl benim Android app metin programl...