DP в PX разница между методами

В каком случае будет разница в результате вычислений?

fun Float.dpToPx(context: Context): Int {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this, context.resources.displayMetrics).toInt()
}

vs

fun Float.dpToPx(): Int = (this * Resources.getSystem().displayMetrics.density).toInt()

В каком случае, Resources.getSystem().displayMetrics.density != context.resources.displayMetrics.density ?


Ответы (1 шт):

Автор решения: Eugene Krivenja

Первый фрагмент кода точно так же перемножает this и displayMetrics.density как и второй. Но в первом используются настройки отображения конкретного приложения, а во втором системные.

Подозреваю что в случае, когда ваше приложение запускается в ином режиме, чем система, пиксели получатся на выходе разные.

Один из вариантов -- compatibility mode
https://developer.android.com/guide/topics/manifest/supports-screens-element#compat-mode

Еще на ум приходят флагманские телефоны, типа Samsung S и S Note, где экран имеет мегаразрешение и системный интерфейс для него заточен, а приложения запускаются в обычном FullHD для экономии энергии.

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

→ Ссылка