Функція Android View.setPadding(int left, int top, int right, int bottom)
приймає значення лише в пікселях, але я хочу встановити відступ у dp. Чи можна це обійти?
Відповіді:
Прямо до коду
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()
це функція, яка успадковується діяльністю, але я намагаюся використовувати ці рядки у спеціальному адаптері списку перегляду. Чи можу я це зробити, якщо не можу зателефонувати getResources()
?
Якщо ви визначаєте розмірність (у dp або будь-якому іншому) у файлі XML (що в будь-якому випадку краще, принаймні в більшості випадків), ви можете отримати значення пікселя за допомогою цього коду:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Існує кращий спосіб програмного перетворення значення в dp:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Потім застосуйте dpValue
до свого методу, наприклад:setPadding(dpValue,dpValue,dpValue,dpValue);
Ви можете розрахувати пікселі для певного значення DPI: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
У мене така сама проблема. Єдине рішення, яке я знайшов (воно вам насправді не допоможе :)) - це встановити його у файлі Xml.
Якщо ви можете отримати щільність із коду, ви можете скористатися перетворенням: "Перетворення одиниць занурення в пікселі екрану є простим: пікселі = провали * (щільність / 160)." (з http://developer.android.com/guide/practices/screens_support.html )
Змінити: ви можете отримати щільність екрану: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi