SORU
4 EKİM 2012, PERŞEMBE


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
4 EKİM 2012, PERŞEMBE


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()
);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kamaniusilelis

    kamaniusilel

    10 HAZİRAN 2011
  • kidrauhl

    kidrauhl

    15 Ocak 2007
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006