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 шт):
Первый фрагмент кода точно так же перемножает this и displayMetrics.density как и второй. Но в первом используются настройки отображения конкретного приложения, а во втором системные.
Подозреваю что в случае, когда ваше приложение запускается в ином режиме, чем система, пиксели получатся на выходе разные.
Один из вариантов -- compatibility mode
https://developer.android.com/guide/topics/manifest/supports-screens-element#compat-mode
Еще на ум приходят флагманские телефоны, типа Samsung S и S Note, где экран имеет мегаразрешение и системный интерфейс для него заточен, а приложения запускаются в обычном FullHD для экономии энергии.
Все что выше написано, на практике не проверено, только подсказки.