Android указывает пиксельные единицы (например, sp, px, dp) без использования XML - PullRequest
6 голосов
/ 16 февраля 2011

Можно ли указать единицу измерения в коде. Я имею в виду, скажем, у меня есть макет, и я хочу, чтобы размер был 20dp, тогда есть ли способ сделать это без записи в макете xml

Ответы [ 2 ]

27 голосов
/ 16 февраля 2011

В виде:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);

В Деятельности, конечно, вы опускаете getContext().

Чтобы преобразовать масштабированные пиксели (sp) в пиксели, просто используйте metrics.scaledDensity вместо metrics.density.

РЕДАКТИРОВАТЬ: Как @ ответ Сантоша указывает, вы можете сделать то же самое, используя служебный класс TypedValue:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
int pixels = Math.round(fpixels);

Для sp, заменить TypedValue.COMPLEX_UNIT_SP на TypedValue.COMPLEX_UNIT_DIP.

Внутренне applyDimension() выполняет те же вычисления, что и мой код выше. Какая версия используется, зависит от вашего стиля кодирования.

4 голосов
/ 23 июля 2012

Вы можете использовать

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics());

сейчас, значение pixels эквивалентно 20dp

. TypedValue содержит другие подобные методы, которые помогают впреобразование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...