Funkcja Androida View.setPadding(int left, int top, int right, int bottom)
akceptuje tylko wartości w px, ale chcę ustawić dopełnienie w dp. Czy można to obejść?
Odpowiedzi:
Prosto do kodu
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()
jest to funkcja dziedziczona przez działanie, ale próbuję użyć tych wierszy w niestandardowym adapterze widoku listy. Czy jest jakiś sposób, w jaki mogę to zrobić, jeśli nie mogę zadzwonić getResources()
?
Jeśli zdefiniujesz wymiar (w dp lub czymkolwiek) w pliku XML (co i tak jest lepsze, przynajmniej w większości przypadków), możesz uzyskać wartość piksela za pomocą tego kodu:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Jest lepszy sposób na programowe przekonwertowanie wartości na dp:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Następnie zastosuj się dpValue
do swojej metody, na przykład:setPadding(dpValue,dpValue,dpValue,dpValue);
Możesz obliczyć piksele dla określonej wartości DPI: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Mam ten sam problem. Jedynym rozwiązaniem, które znalazłem (nie pomoże Ci to :)) jest ustawienie go w pliku Xml.
Jeśli możesz uzyskać gęstość z kodu, możesz użyć konwersji: „Konwersja jednostek zanurzenia na piksele ekranu jest prosta: piksele = spadki * (gęstość / 160)”. (z http://developer.android.com/guide/practices/screens_support.html )
Edycja: możesz uzyskać gęstość ekranu: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi