Ответы:
Вам придется конвертировать его из dps в пиксели, используя масштабный коэффициент отображения.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
в px
? Спасибо.
Я знаю, что это старый вопрос, однако я нашел более аккуратный способ сделать это преобразование.
Ява
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);
И ваши измерения. 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 (пикселей), и это правда.