У меня есть два устройства Android с одинаковым разрешением и PPI. Но когда я запускаю свое приложение для одного устройства, которым является Samsung Tab 4, ресурсы вызываются из папки с обычным макетом. Но для другого устройства, Samsung J Max, оно из папки layout-600. Почему это ведет себя по-разному для этих устройств? Любые предложения будут ценны.
Ресурсы Android, вызываемые из разных папок макета
Ответы (3)
Вы должны проверить эту статью Google. Указывалось, что:
В этом контексте у Samsung есть еще один небольшой сюрприз: если посчитать, его экран имеет разрешение 170 точек на дюйм, что далеко не самое плотное среди Android-устройств. Тем не менее, он заявляет о себе как «hdpi» (и как имеющий «большой» размер экрана). Причина проста: так выглядит лучше.
Это означает, что ваш Tab
ppi равен 170 (а не 220 ppi). В результате: ширина 800, 170 ppi --> 800/(170/160) > 600. Вот почему ваш ресурс Samsung Tab 4 находится в папке "layout-sw600dp"
Квалификатор 600
в layout-600
связан с размерами экрана в dp
и не обязательно с DPI или разрешением экрана в пикселях. Другие факторы, такие как соотношение сторон и размер диагонали экрана, также принимаются во внимание.
Вы можете определить размеры вашего экрана в dp
программно, используя инструкции в этом опубликовать:
Configuration configuration = yourActivity.getResources().getConfiguration();
int screenWidthDp = configuration.screenWidthDp; //The current width of the available screen space, in dp units, corresponding to screen width resource qualifier.
Могу поспорить, что значение screenWidthDp
на этих устройствах разное.
Это зависит от плотности пикселей (dp) устройств Android, которые очень зависят от устройства к устройству и в соответствии с этим устройством Android автоматически определяют, из какой папки макета он будет отображать пользовательский интерфейс, вот небольшая информация о том, как это работает:
Разрабатывая пользовательский интерфейс для разных размеров экрана, вы обнаружите, что для каждого дизайна требуется минимальное количество места. Таким образом, каждый приведенный выше обобщенный размер экрана имеет связанное с ним минимальное разрешение, определяемое системой. Эти минимальные размеры указаны в единицах «dp» — тех же единицах, которые вы должны использовать при определении макетов, — что позволяет системе не беспокоиться об изменениях плотности экрана.
xlarge экраны имеют разрешение не менее 960dp x 720dp
большие экраны не менее 640dp x 480dp
обычные экраны имеют разрешение не менее 470dp x 320dp
маленькие экраны имеют разрешение не менее 426dp x 320dp
Набор из шести обобщенных плотностей:
ldpi (низкий) ~120 точек на дюйм
mdpi (средний) ~160dpi
hdpi (высокий) ~ 240 точек на дюйм
xhdpi (сверхвысокий) ~320 точек на дюйм
xxhdpi (экстра-экстра-высокий) ~ 480 точек на дюйм
xxxhdpi (экстра-экстра-экстра-высокий) ~640 точек на дюйм
Для получения дополнительной информации прочитайте документ Google: https://developer.android.com/guide/practices/screens_support.html