Разные лейауты для разных телефонов

Рейтинг: 3Ответов: 3Опубликовано: 15.04.2015

Такая проблема. Создаем приложение для зоопарка устройств. и необходимо чтобы дизайн совпадал пиксель в пиксель. Впринципе все смогли разрулить с помощью dpi, выставляя значения в них. на разных екранах делаем скрин, вставляем в фотошоп и все накладывается пиксель в пиксель. Но есть такие телефоны типо нексуса 6, у которых нет конкретного размера в dpi тоесть он между xxhdpi и xxxhdpi. И соотвественно когда я указываю размер кнопки например 50dpi то она выглядит иначе чем я ожидаю. Я не знаю как это решить. Из этого вопросы

  1. Как это решается?
  2. Как сделать чтобы на определенном телефоне поставлялся определенный лейаут?

НАШЕЛ

res/layout-sw600dp/main_activity.xml   # For 7” tablets (600dp wide and bigger)
res/layout-sw720dp/main_activity.xml   # For 10” tablets (720dp wide and bigger)

смущает 600dp wide and bigger это что этот лейаут будет и для экранов с большей плотностью тоже? а как сделать только для конкретного экрана?

Ответы

▲ 2Принят

Можно например так:

if(android.os.Build.MODEL.contains("Nexus 6"))
    setContentView(R.layout.my_layout_for_nexus_6);

Мне и самому то не нравится такое выделывать, но что делать раз Nexus такой специфичный :)

▲ 1

Nexus 6 - 730 x 410 dp
Nexus 9 - 1024 x 768 dp

Если используются разные layout'ы для портретной и альбомной ориентации (как часто бывает), то можно учесть это:

In order to take advantage of the screen real estate on the Nexus 6 and Nexus 9, we emphasize the importance of responsive design. In the past, if you assumed that landscape mode is significantly wider than portrait mode, you may run into problems on a device like the Nexus 9, which has an aspect ratio of 4:3. Instead of declaring layouts using the layout-land or layout-port resource folder qualifiers, we strongly recommend switching to the w<N>dp width resource folder qualifier so that content is laid out based on available screen width.

Тогда для Nexus 6 получаем layout-w410dp-h730dp (портретная) и layout-w730dp-h410dp (альбомная)

▲ 1

Кроме всего ранее озвученного можно попробовать вынести размеры елементов и шрифтов в dimens. Причем раскидать их по папкам с комбинацией денсити и размера:

values-sw320dp-xhdpi
values-sw600dp-xhdpi
values-sw720dp-xhdpi
values-sw320dp-xxhdpi
values-sw600dp-xxhdpi
values-sw720dp-xxhdpi
values-sw320dp-xxxhdpi
values-sw600dp-xxxhdpi
values-sw720dp-xxxhdpi

см. также http://developer.android.com/guide/topics/resources/providing-resources.html