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

Помимо общей папки 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 -> OK
  • Android 1.6 использует res/layout-v4 -> OK
  • Android 2.0 использует res/layout -> НЕ ОК
  • Android 2.1 использует res/layout-v4 -> OK

Так почему же 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. Очень странно! Но я надеюсь, что этот обходной путь поможет нескольким другим людям.


person znq    schedule 21.01.2010    source источник
comment
И последний пункт: b.android.com является официальным средством отслеживания ошибок. Если вы можете прикрепить или указать на набор исходного кода, который воспроизводит проблему, это поможет ускорить анализ.   -  person CommonsWare    schedule 21.01.2010


Ответы (1)


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

person Diego Torres Milano    schedule 21.01.2010
comment
Чтобы уточнить ответ г-на Милано, res/layout-v3 должен использоваться всем, что работает под управлением Android 1.5 или выше. res/layout будет использоваться Android 1.1 или 1.0. Дополнительные сведения см. на странице developer.android.com/guide/practices/ ( Ресурсы, которые предназначены для использования только на определенном уровне API или выше. Например, если ваше приложение предназначено для работы как на Android 1.5 (уровень API 3), так и на Android 1.6 (уровень API 4 и выше), вы можете использовать -v4 квалификатор, чтобы пометить любые ресурсы, которые должны быть исключены, когда ваше приложение работает на Android 1.5 (уровень API 3). - person CommonsWare; 21.01.2010
comment
Спасибо за подсказку Марк и dtmilano. Это помогло решить проблему и найти обходной путь для ошибки. Смотрите мое обновление в моем вопросе выше. - person znq; 22.01.2010