Что корректный путь состоит в том, чтобы указать размеры в DIP из кода Java?

Я нашел, что возможно установить размеры моих интерфейсных элементов в разметках XML с помощью ПАДЕНИЙ в качестве в следующем фрагменте:

android:layout_width="10dip"

Но весь интерфейс Java берет целое число в качестве аргументов и нет никакого способа указать размеры в ПАДЕНИЯХ. Что корректный путь состоит в том, чтобы вычислить это?

Я полагал, что должен использовать плотность свойства DisplayMetrics класс, но действительно ли это - корректный путь?

Я могу полагаться на эту формулу, являющуюся всегда корректным?

пиксели * DisplayMetrics.density = падение

Существует ли служебная функция для преобразования где-нибудь в Android?

51
задан 5 revs, 3 users 51% 9 October 2011 в 23:05
поделиться

2 ответа

Это правильная формула. Хотя DisplayMetrics.density не является статическим членом, поэтому, согласно тому же документу, на который вы ссылались, правильное использование:

// Maybe store this in a static field?
final float SCALE = getContext().getResources().getDisplayMetrics().density;

// Convert dips to pixels
float valueDips = 16.0f;
int valuePixels = (int)(valueDips * SCALE + 0.5f); // 0.5f for rounding
45
ответ дан 7 November 2019 в 09:48
поделиться

Для этого существует уже созданный служебный метод TypedValue.applyDimensions (int, float, DisplayMetrics) .

Вот как его использовать:

// returns the number of pixels for 123.4dip
int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
                     (float) 123.4, getResources().getDisplayMetrics());

Есть список других типов, которые вы можете использовать с ним, включая COMPLEX_UNIT_SP , COMPLEX_UNIT_PT , все они находятся на странице, на которую я ссылался выше. Если вы исключите приведение типа (int), вы получите число с плавающей запятой.

Я столкнулся с той же проблемой и нашел ее, ковыряясь в коде.

91
ответ дан 7 November 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: