Использует ли setWidth (int pixels) dip или px?


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

спасибо.

5 85

5 ответов:

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

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));

правильный способ получить постоянное число провалов в коде-это создать 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));

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

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

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

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

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

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