Ресурсы Android, вызываемые из разных папок макета

У меня есть два устройства Android с одинаковым разрешением и PPI. Но когда я запускаю свое приложение для одного устройства, которым является Samsung Tab 4, ресурсы вызываются из папки с обычным макетом. Но для другого устройства, Samsung J Max, оно из папки layout-600. Почему это ведет себя по-разному для этих устройств? Любые предложения будут ценны.


person Anand Asir    schedule 13.10.2016    source источник


Ответы (3)


Вы должны проверить эту статью Google. Указывалось, что:

В этом контексте у Samsung есть еще один небольшой сюрприз: если посчитать, его экран имеет разрешение 170 точек на дюйм, что далеко не самое плотное среди Android-устройств. Тем не менее, он заявляет о себе как «hdpi» (и как имеющий «большой» размер экрана). Причина проста: так выглядит лучше.

Это означает, что ваш Tab ppi равен 170 (а не 220 ppi). В результате: ширина 800, 170 ppi --> 800/(170/160) > 600. Вот почему ваш ресурс Samsung Tab 4 находится в папке "layout-sw600dp"

person Kingfisher Phuoc    schedule 13.10.2016

Квалификатор 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 на этих устройствах разное.

person Mike Laren    schedule 13.10.2016

Это зависит от плотности пикселей (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

person Kapil Rajput    schedule 13.10.2016