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