2013-03-11 6 views
3

Я знаю, что это поведение не ожидается и не стандартно, но я не знаю, может ли это быть достигнуто. Google также поняла, что схема с нормальным-большим-худшим не самая лучшая, поэтому она устарела от Android 3.2. (layout-swXXXdp будет лучшим выбором для меня)Принудительное устройство для получения ресурсов из папки с ресурсами

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

Главная проблема:

Galaxy Note 1 и Galaxy Tab 1 (и другие устройства с тем же спецификацией) выбрать ресурсы из одной и той же папки layout-large. Но разумно мне нужно сделать разные макеты под экранами 7 дюймов и выше 7 дюймов. Я знаю, что я мог бы создать отдельную папку для «устройств исключения» (например, layout-large-xhdpi-1280x800, как указано here), но тогда мне пришлось бы поддерживать несколько почти (или точных) тех же xml-файлов в разных папках только потому, что эти некоторые устройства.

Таким образом, целью было бы поддерживать только один пакет xml (папка) для устройств под-7inch и один для устройств выше 7 дюймов. Я знаю, что есть приемы, такие как:

  1. Именование XML-ы по-разному (main.xml и основного large.xml), и принять решение в коде, чтобы выбрать, но даже устройства не могут решить о себе от кода, насколько они точны (например, 7-дюймовые планшеты могут отдать от 6,8 до 7,8 дюйма). Кроме того, я хотел бы использовать более «андроидный» способ с папками ресурсов.
  2. поддерживать папки с исключениями, как я уже упоминал. layout, layout-large, layout-specifictags1, layout-specifictags2 и список могут расширяться. Также specictags1, tags2 и normal имеют одинаковые файлы xml, но для устройств не требуется выбирать из layout-large. Вся причина заключается в том, чтобы избежать этого.
  3. (EDIT) Идея использования псевдонимов придумала @Joe Malin. К сожалению, я не могу создать псевдоним main.xml в layout-large-xhdpi-1280x800, который ссылается на main.xml в layout, потому что он ссылается на self then (делая бесконечный цикл). Поэтому мне нужно было бы сохранить файл fakemain.xml в layout-large-xhdpi-1280x800, который ссылается на main.xml, который существует только в layout. Но тогда мне также нужен fakemain.xml в layout, потому что тогда мне не нужно заботиться о макете из кода и использовать только fakemain.xml, который является псевдонимом. Однако это решение еще 10 может Работает, но не работает на практике, к несчастью. Если у меня есть файл fakemain.xml в layout, layout-large и layout-large-xhdpi-1280x800 для заметки галактики, то псевдоним указывает на layout-large один, и я ничего не добился, используя псевдоним.

Вопрос:

макета sw600dp концепция даст мне самое лучшее и необходимое поведение, но оно не поддерживается под уровнем API 13.

  • Есть ли способ, чтобы заставить устройство выбрать из этой папки или написать над своей переменной (с отражением java? - я знаю, что это очень плохо) вести себя как обычный экран невелик?
  • Есть ли способ сохранить только два XML-пакет (папку):
    • один для детей в возрасте до 7 дюймов-устройств,
    • и один для выше 7inch устройств.

ответ

1

Наконец-то я получил лучшее решение, я думаю. Как-то я не заметил, что существует два типа псевдонимов; тот, что @Joe Malin linked, и this type.

Первый тип не является решением несчастливо, но второй один именно то, что я искал, и страница разработчик описывает решение, как мне нужно:

Рез/макет/main.xml: одинарное расположение

разрешения/макет большой: расположение несколько панели

макет разрешение/макет sw600dp: мульти-панель макет

последние два файла идентичен, так как один из их будут сопоставлять устройства Android 3.2, , а другой - для планшетов и телевизоров с более ранними версиями Android .

Чтобы избежать повторения одного и того же файла для планшетов и телевизоров (и головной боли обслуживания в результате этого), вы можете использовать файлы псевдонимов.

Поэтому мне нужно сделать макет-различие в макетах с другими именами внутри папки layout; как layout/mainnormal.xml и layout/mainlarge.xml. Затем мне нужно сделать layout.xml в разных папках values и сделать псевдонимы, как указано выше, link.

Например я нужен values/layout.xmlvalues-large-xhdpi-1280x800/layout.xml (для галактики Примечание) values-large/layout.xml (для больших устройств) и, возможно, также layout-sw600dp/layout.xml.

В первых двух мне нужно создать псевдонимы для mainnormal.xml, а для остальных - для mainlarge.xml. Таким образом, мне не нужно будет знать код, который использует тот, который я использую, просто используйте идентификатор, например R.layout.main.

layout.xml в первых двух случая:

<resources> 
    <item name="main" type="layout">@layout/mainnormal</item> 
</resources> 

В последних случаях:

<resources> 
    <item name="main" type="layout">@layout/mainlarge</item> 
</resources> 
0

бы сделать псевдоним ресурса помощь: Creating alias resources?

+0

Unfortunatly Я не могу сделать псевдоним по имени xyz.xml в 'компоновщикам большого xhdpi-1280x800 'который ссылается на xyz.xml в' layout', потому что тогда он ссылается на self (делая бесконечный цикл). Я объясняю это далее в Edit of OP – abbath

+0

Я нашел решение и его псевдонимы, но не тип, который вы связали. – abbath

1

Однако существует устройство под 3.2, которые я должен поддерживать

Не очень много.

Есть ли способ заставить устройство выбрать из этой папки или написать над своей переменной (с отражением java?), Я знаю, что это очень плохо) вести себя как обычный экран невелик?

Нет, но вы можете узнать номер модели для тех немногих устройств и выбрать для загрузки различных макетов для них (например, R.layout.main нормально, R.layout.you_are_worrying_about_this_way_too_much для нескольких моделей уровня до API 13 7" таблетки).

есть способ сохранить только два пакета XML (папка): один для детей в возрасте до 7 дюймов-устройств и один для выше 7inch устройств

чтобы быть в безопасности, я бы с тремя :

  • res/layout/ для ниже 7"
  • res/layout-sw600dp/ для 7" и до
  • res/layout-xlarge/, возможно, с использованием псевдонимов те в res/layout-sw600dp/, для кучки XOOMs, Tab 10.1, и такие, что А не было» t получить до 3.2
+0

Спасибо, эти три папки могут работать хорошо. Тогда единственное устройство, которое мне нужно будет покрыть, - это 7inch-not-upgrade-galaxytab1, у которого будет дизайн телефона (это будет хорошо для меня, но клиент будет думать иначе). – abbath

+0

Однако, если я решаю в коде (с тестированием на дюймы), какой макет выбрать, я могу загрузить любой макет и не позволять андроиду выбирать. Это плохой выбор? Я чувствую, что это не слишком андроид, но таким образом я полностью контролирую макеты. – abbath

+0

@abbath: «Это плохой выбор?» - В целом, да, просто потому, что есть * путь * слишком много устройств. Наличие инструкции «switch» с тысячей записей, даже если вы сможете узнать подробности обо всех этих устройствах, будет недостижимым. Чтобы провести аналогию: пользовательский агент, нюхающий в веб-приложении для обеспечения обходных решений, например, для IE6, является разумным. Говоря, что вы попытаетесь каталогизировать каждую версию каждого браузера для каждой платформы, чтобы попытаться сделать собственное сопоставление браузера с целевым веб-контентом, обычно не делается. – CommonsWare

Смежные вопросы