Подтвердить что ты не робот

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

Nexus 7: 7 "1280x800

Вкладка Galaxy 10.1 10 "1280x800

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

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

  • layout-sw600dp
  • раскладка-sw600dp-порт

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

  • layout-sw720dp
  • раскладка-sw720dp-порт

Он отлично работает на Nexus 7, но загружает макеты sw600dp на 10-дюймовый планшет.

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

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

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

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

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

изменить: форматирование

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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? Потому что, андроид, предоставляющий каталог drawables для разных изображений, единственное, что есть его разрешение. И у вас есть решение выше.

Edit

Затем вам нужно разработать различные макеты. Никакой другой вариант. Я нашел в 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)

Ответ 3

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

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

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

Ответ 4

Да, вы должны использовать папки, зависящие от макета, но также убедитесь, что любые автономные макеты устройства входят в папку 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 например, тогда любые устройства, которые соответствуют большому классификатору, будут использовать макеты здесь вместо другой папки, это из-за критериев наилучшего соответствия, которые вы можете прочитать здесь здесь. Он будет соответствовать ему как большому устройству, прежде чем он будет соответствовать плотности, поэтому экраны плотности не-mdpi будут по-прежнему использовать эти макеты.

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

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