Ошибка Android 2.1:использует res/layout-v3 вместо res/layout

StackOverflow https://stackoverflow.com/questions/2108557

  •  22-09-2019
  •  | 
  •  

Вопрос

В дополнение к общему res/layout папка у меня есть res/layout-v3папка для обратной совместимости с Android 1.5, которая имеет проблемы с некоторыми RelativeLayout макеты.

Он отлично работает со всеми телефонами и эмуляторными версиями, протестированными до сих пор.Кроме версии 2.1 (эмулятор и Nexus One).Они решили отобразить макет Android 1.5 (res/layout-v3) вместо значения по умолчанию res/ layout.

Может ли кто-нибудь еще это подтвердить?Это ошибка ОС Android?Если да, то где лучше всего отправить отчет об ошибке?


ОБНОВЛЯТЬ:

После прочтения https://developer.android.com/guide/practices/screens_support.html#qualifiers еще раз (спасибо Марку за подсказку), особенно эту часть

Ресурсы, которые предназначены для использования только на определенном уровне API или выше.Например, если ваше приложение предназначено для работы как на Android 1.5 (API -уровне 3), так и на Android 1.6 (API -уровне 4 и выше), вы можете использовать квалификатор -v4 для помещения любых ресурсов, которые должны быть исключены при запуске вашего приложения на Android 1.5 (API -уровне 3).

Я изменил порядок расположения с

  • res/layout-v3 (только для Android 1.5 -> я сделал неверное предположение)
  • res/layout (для всего остального)

к моей новой конфигурации, состоящей из:

  • res/layout-v4 (для Android 1.6 и выше)
  • res/layout (для всего остального -> в данном случае это будет только Android 1.5)

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

  • Android 1.5 использует res/layout -> ОК
  • Android 1.6 использует res/layout-v4 -> ОК
  • Android 2.0 использует res/layout -> НЕ В ПОРЯДКЕ
  • Android 2.1 использует res/layout-v4 -> ОК

Так почему же Android 2.0 (как на эмуляторе, так и на Motorola Milestone) не выбирает правильную папку ресурсов макета?

Я еще раз проверил это на версии 2.0.1, и там, похоже, все работает.Похоже, это ошибка в версии 2.0, которая была исправлена ​​в версии 2.0.1.

Но теперь самое странное:чтобы заставить его каким-то образом работать на версии 2.0, я скопировал папку res/layout-v4 в res/layout-v5, чтобы заставить Android 2.0 использовать этот ресурс макета.Не сработало.Но затем я попытался скопировать его в res/layout-v6 (который должен быть Android 2.0.1), и вуаля, он внезапно заработал с 2.0.Очень странно!Но я надеюсь, что этот обходной путь поможет еще нескольким людям.

Это было полезно?

Решение

Я протестировал несколько устройств и эмуляторов (хотя и не очень тщательно), и кажется, что выбрана папка ресурсов с файлом более высокая версия <= версия устройства.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top