Android işlevi View.setPadding(int left, int top, int right, int bottom)yalnızca piksel cinsinden değerleri kabul eder, ancak dp'de dolguyu ayarlamak istiyorum. Etrafında herhangi bir yol var mı?
Yanıtlar:
Doğrudan kodlama
int padding_in_dp = 6; // 6 dps
final float scale = getResources().getDisplayMetrics().density;
int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
getResources()Bir etkinlik tarafından miras alınan bir işlev olduğunu varsayıyorum , ancak bu satırları özel bir liste görünümü bağdaştırıcısında kullanmaya çalışıyorum. Arayamazsam bunu yapmamın bir yolu var mı getResources()?
Boyutu (dp veya başka bir şekilde) bir XML dosyasında tanımlarsanız (bu, en azından çoğu durumda daha iyidir), bu kodu kullanarak bunun piksel değerini alabilirsiniz:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Değeri programlı olarak dp'ye dönüştürmenin daha iyi bir yolu var:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Ardından dpValueyönteminize uygulayın , örneğin:setPadding(dpValue,dpValue,dpValue,dpValue);
Belirli bir DPI değeri için pikselleri hesaplayabilirsiniz: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Ben de aynı problemim var. Bulduğum tek çözüm (size gerçekten yardımcı olmayacak :)) Xml dosyasında ayarlamaktır.
Yoğunluğu koddan alabiliyorsanız, dönüştürmeyi kullanabilirsiniz: "Daldırma birimlerinin ekran piksellerine dönüştürülmesi basittir: piksel = düşüş * (yoğunluk / 160)." ( http://developer.android.com/guide/practices/screens_support.html adresinden )
Düzenleme: Ekran yoğunluğunu alabilirsiniz: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi