Відповіді:
Вам доведеться перетворити його з dps у пікселі, використовуючи коефіцієнт масштабу дисплея.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
в px
? Дякую.
Я знаю, що це старе питання, проте я знайшов набагато акуратніший спосіб зробити це перетворення.
Java
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Котлін
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
вказане значення DP, яке ви хочете перетворити на PX
Дивлячись на вашу вимогу, є і альтернативне рішення. Здається, ви знаєте розміри в dp під час компіляції, тому ви можете додати параметр розміру в ресурси. Тоді ви можете запитати запис про розмірність, і він буде автоматично перетворений у пікселі в цьому дзвінку:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
І ваш dimens.xml матиме:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Розширюючи цю ідею, ви можете просто зберегти значення 1dp або 1sp як розмірний запис і запитувати його і використовувати його як множник. Використовуючи такий підхід, ви ізолюєте код від математичних речей і покладаєтесь на бібліотеку для виконання розрахунків.
найпростіший спосіб (і навіть працює з api 1), який перевіряється:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
З документальних записів:
Отримайте розмір для конкретного ідентифікатора ресурсу для використання у розмірі в неочищених пікселях. Це те саме, що і getDimension (int), за винятком того, що повернене значення перетворюється на цілі пікселі для використання як розмір. Перетворення розміру включає округлення базового значення та забезпечення того, що ненульове базове значення має розмір принаймні одного пікселя.
Так, це округлення значення, але це не дуже погано (просто у непарних значеннях на hdpi та ldpi пристроях потрібно додати трохи значення, коли ldpi не дуже часто) я перевірив на пристрої xxhdpi, який перетворює 4dp в 16 (пікселів), і це правда.