Как правильно включить 10"и 7" макеты

Nexus 7: 7 "1280x800

Galaxy Tab 10,1 10" 1280x800

Я хочу, чтобы мое приложение работало на 7 и 10-дюймовых планшетах. Насколько я знаю, я должен включить эти папки макета в мое приложение:

для 7-дюймовых планшетов

  • макета sw600dp
  • Макет-sw600dp-порт

для 10-дюймовых планшетов

  • макета sw720dp
  • Макет-sw720dp-порт

Он отлично работает на Nexus 7, но загружает раскладки sw600dp на 10 "планшете.

Если я включу эти папки по умолчанию:

  • расположение
  • расположение портов

10 "Галактика вкладка загружает макеты из них.

Если я включу только папки с макетом по умолчанию и папку sw600dp, то это приведет к сбою на nexus7.

Как мне поддерживать телефоны, 7-дюймовые и 10-дюймовые планшеты, если 10-дюймовая вкладка galaxy не загружает макеты sw720p?

Редактирование: форматирование

4 ответа

Решение

Проблема была в том, что у меня не было папки с макетом по умолчанию.

Я пытался обойтись, используя только папки sw600dp и sw720dp. Я до сих пор не знаю, почему они не работают, но мне все равно. Я не могу использовать swxxxdp <3.2 в любом случае, так что винт это.

Поэтому, если вы хотите написать приложение, которое должно поддерживать телефоны (2.2+), 7-дюймовые планшеты и 10-дюймовые планшеты, используйте следующие старомодные материалы:

макет это по умолчанию, это необходимо, даже если вы не планируете поддерживать телефоны!

большой макет для 7"планшета (работает на эмуляторе и nexus7)

layout-xlarge для 10"планшета (работает на эмуляторе и galaxytab10.1)

Другие люди тоже пришли к такому же выводу.

Я также сталкиваюсь с такой проблемой в моем приложении. Но я нашел хорошее решение для этого. У меня есть только один макет для tablet и имя каталога layout-sw600dp, Теперь, когда деталь столкнулась с проблемами высоты и ширины, я создал несколько разных values каталог, в котором я размещаю dimensions а также font size и другие заглушки. Так не будет constant значение в layout экрана планшета.

androd:layout_width:"60dp" // i drop this scenario

androd:layout_width:"@dimen/tab_width" // i used this scenario

и ваш values имя каталога будет как

values-xlarge
values-large

Все значения будут получены из вашего каталога значений. Это не создаст другой макет, но один макет может быть использован несколько раз.

Ниже приведены слова Developer.android сайт. Примеры конфигурации

Чтобы помочь вам нацелить некоторые из ваших дизайнов для различных типов устройств, вот некоторые цифры для типичной ширины экрана:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7” tablet (600x1024 mdpi).
720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).

Используя квалификаторы размера из таблицы 2, ваше приложение может переключаться между различными ресурсами макета для мобильных телефонов и планшетов, используя любое число, необходимое для ширины и / или высоты. Например, если 600dp - это наименьшая доступная ширина, поддерживаемая макетом планшета, вы можете предоставить следующие два набора макетов:

res / layout / main_activity.xml # Для телефонов
res/layout-sw600dp/main_activity.xml # Для планшетов

===

В этом вы можете видеть, что макет для 1280*720 находится под layout-sw720dp поэтому вместо создания layout-normal-xlarge Вы должны использовать эту вещь, которая позволяет вам решать различия. Вместо того, чтобы идентифицировать по-другому, используя layout-large-mdpi а также layout-large-ldpiБудешь ли ты идентифицировать ее smallest width? Потому что, обеспечение Android drawables каталог для разных изображений, единственное его разрешение. И у вас есть вышеуказанное решение.

редактировать

Тогда вам придется разрабатывать разные макеты. Нет другого варианта. Я нашел на http://jamil.fluidsoul.net/2011/03/06/creating-android-applications-for-multiple-screen-sizes.

Low density Small screens QVGA 240x320 (120dpi):

layout-small-ldpi (240x320)  
layout-small-land-ldpi (320x240)

Low density Normal screens WVGA400 240x400 (x432) (120dpi):

layout-ldpi  (240 x 400 )
layout-land-ldpi  (400 x 240 )

Medium density Normal screens HVGA 320x480 (160dpi):

layout-mdpi (320 x 480 )
layout-land-mdpi (480 x 320 )

Medium density Large screens HVGA 320x480 (160dpi):

layout-large-mdpi (320 x 480 )
layout-large-land-mdpi (480 x 320)

Galaxy Tab ( 240 dpi ):

layout-large  (600 x 1024) 
layout-large-land  (1024 x 600)

High density Normal screens WVGA800 480x800 (x854) (240 dpi):

layout-hdpi (480 x 800)
layout-land-hdpi (800 x 480)

Xoom (medium density large but 1280x800 res) (160 dpi):

layout-xlarge (800 x 1280)
layout-xlarge-land (1280 x 800)

Да, вы должны использовать папки, зависящие от макета, но также убедитесь, что все независимые от устройства макеты находятся в папке res/layout.

Это упомянуто на сайте разработчиков Android, но, повторяя их точку зрения, если у вас есть макет, который доступен только в папке layout-xlarge в приложении, которое поддерживает, например, устройства большого и обычного размера, приложение будет аварийно завершать работу как устройства меньшего размера. не сможет найти соответствия для этого ресурса.

Вот хорошая структура папок, начните с:

res/layout

Сохраняйте независимый от устройства макет, вы можете избежать этого, если учитываете все возможные типы квалификаторов, но это все же более безопасный вариант.

Если вы хотите добавить конкретные макеты для, скажем, 7 и 10-дюймовых планшетов, используйте все следующее:

res/layout-large
res/layout-xlarge
res/layout-sw600dp
res/layout-sw720dp
res/layout-sw800dp

И так далее для любой конкретной ширины экрана устройства, которую вы хотите поддерживать. Следует отметить, что sw600 поддерживает наименьшую возможную ширину, поэтому избегает использования ширины экрана, когда устройство удерживается в горизонтальном положении. Использование квалификаторов swxxxdp предпочтительнее, но они были добавлены в API 13, так что вам все равно понадобится большой xlarge для более старых ОС Android.

Что касается использования dpi, имейте в виду, что если вы устанавливаете ТОЛЬКО один определитель плотности для размера, layout-large-mdpi например, тогда любые устройства, которые соответствуют большому квалификатору, будут использовать макеты отсюда вместо другой папки, это связано с критериями наилучшего соответствия, о которых вы можете прочитать здесь. Он будет соответствовать как большое устройство, прежде чем он будет соответствовать плотности, поэтому экраны с плотностью не-MDI будут по-прежнему использовать эти макеты.

Чтобы противостоять этому, вы должны будете включить папки для любых других плотностей, которые вы поддерживаете, так что layout-large-hdpi следуя приведенному выше примеру, и включите в эту папку hdpi-версии макетов, которые вы использовали в папке mdpi, если вам требуется, чтобы они отличались.

Конечно, избегайте дублирования ваших макетов, не копируйте независимые от устройства макеты в каждую неиспользуемую папку, если они вам нужны только в res/layoutпопробуйте и сохраняйте макеты, для которых нужны эти классификаторы, в папках и правильно их упорядочивайте, следя за тем, чтобы имена папок назывались с квалификаторами в правильном порядке приоритета, чтобы избежать использования неправильной папки для комбинации плотности / размера.

Это очень странно, так как вы делаете правильные вещи.

Квалификатор sw600dp должен быть выбран Nexus 7.
Если доступно, квалификатор sw720dp должен быть выбран на вкладке Galaxy.

Вы уверены, что происходит сбой при попытке найти подходящий макет? Android может найти правильный макет, но что-то в XML-файле макета может отсутствовать, и это вызвано сбоем.

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