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

Я считаю, что методы getDimension и getDimensionPixelSize запутывают.

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

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

Solutions Collecting From Web of "Android: Почему getDimension и getDimensionPixelSize возвращают то же самое?"

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

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

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

Мне кажется очевидным, что вы проводите тесты на устройстве или эмуляторе 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.