Android: Почему getDimension и getDimensionPixelSize возвращают то же самое?

Я нахожу методы getDimension и getDimensionPixelSize запутанными.

Мне казалось, что getDimension вернет фактическое значение, хранящееся в измерении, например 10dp, и getDimensionPixelSize вернет его преобразование в px.

Но оба, похоже, делают то же самое...

Ответы

Ответ 1

getDimension() возвращает число с плавающей запятой, которое является значением размера, отрегулированным текущими показателями отображения:

getDimensionPixelSize() возвращает целое число. Это то же самое, что и getDimension(), округленное до int с любым ненулевым размером, гарантированным как минимум на один пиксель.

Для значений целочисленного размера они возвращают одинаковое числовое значение.

Ответ 2

Мне кажется очевидным, что вы проводите тесты на устройстве или эмуляторе mdpi.
На дисплеях mdpi, 1px = 1dp.

Итак, просто протестируйте методы на экране различной плотности.


Обратите внимание, что

public float getDimension (int id)

Retrieve a dimensional for a particular resource ID.  
Unit conversions are based on the current DisplayMetrics associated with the resources.

Parameters  
id  The desired resource identifier, as generated by the aapt tool.  
This integer encodes the package, type, and resource entry. The value 0 is an invalid identifier.

Returns  
Resource dimension value multiplied by the appropriate metric.

Итак, если вы установите единицу в px в вашем макете xml, вы получите сырые px (не конвертированные).
В противном случае, если вы правильно установите устройство в формате dp в макете xml, вы получите правильное преобразование в px.