Использует ли setWidth (int пикселов) dip или px? - PullRequest
90 голосов
/ 09 марта 2010

Использует ли setWidth (int пиксели) независимый от устройства пиксель или физический пиксель в качестве единицы измерения? Например, устанавливает ли setWidth (100) ширину представления в 100 dips или 100 px?

Спасибо.

Ответы [ 5 ]

213 голосов
/ 09 марта 2010

Он использует пиксели, но я уверен, что вам интересно, как использовать провалы вместо этого. Ответ в TypedValue.applyDimension(). Вот пример того, как конвертировать dips в px в коде:

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
24 голосов
/ 17 февраля 2013

Правильный способ получить постоянное количество DIP в коде - создать XML-файл ресурсов, содержащий значения dp, например:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

Затем обратитесь к ресурсу в вашем коде так:

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

Возвращаемое число с плавающей точкой будет масштабироваться соответственно плотности пикселей устройства, поэтому вам не нужно будет повторять метод преобразования во всем приложении.

6 голосов
/ 01 ноября 2014

Метод setWidth (100), установите 100 px как ширину (не в dp). Так что вы можете столкнуться с различными проблемами ширины на разных телефонах Android. Поэтому используйте измерение в dp вместо пикселей. Используйте приведенный ниже код, чтобы получить измерение в dp ширина образца = 300 пикселей и высота = 400 пикселей.

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
4 голосов
/ 14 февраля 2015
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

Источник (@Romain Guy)

0 голосов
/ 09 марта 2010

Пиксели, конечно, метод запрашивает пиксели в качестве параметра.

...