Используется неверный ресурс

У меня есть два макета для разных размеров экрана:

layout
layout-w580dp

Отобразить журнал метрик для портретной и альбомной ориентации:

DisplayMetrics{density=1.3312501, width=800, height=1280, scaledDensity=1.5841876, xdpi=216.0, ydpi=216.0}
DisplayMetrics{density=1.3312501, width=1280, height=800, scaledDensity=1.5841876, xdpi=216.0, ydpi=216.0}

Портретная ориентация имеет 800/1.5841876=504dpтак ресурс от layout папка должна быть использована. Пейзажная ориентация имеет 1200/1.5841876=704dpтак ресурс от layout-w580dp папка должна быть использована.
Однако в обоих направлениях ресурс получается из layout-w580dp папка.
Что вызывает эту проблему?

1 ответ

Решение

В соответствии с поддержкой нескольких экранов формула для преобразования из dp в физические пиксели px = dp * (dpi / 160), Поскольку мы хотим конвертировать в обратном направлении, нам нужно решить для dp: dp = px * 160 / dpi, Для ваших двух примеров у нас есть следующие значения и расчеты:

  1. px = 800 (Ширина), dpi = 216 (Xdpi) dp = px * 160 / dpi = 800 * 160 / 216 = 592.59,

  2. px = 1280 (Ширина), dpi = 216 (Xdpi) dp = px * 160 / dpi = 1280 * 160 / 216 = 948.15,

В обоих случаях ширина составляет более 580 dp.

Другие вопросы по тегам