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

Конфликтующие сообщения lint относительно использования paddingStart

После того, как была выпущена поддержка API 17/RTL, я добавил следующее в мой манифест

android:supportsRtl="true"

который заставил Линта по праву дать мне эти предупреждения везде, где у меня есть paddingLeft/Right в моих представлениях:

  • Рассмотрите возможность добавления android: paddingStart = "8dp", чтобы лучше поддерживать макеты слева направо

  • Рассмотрим добавление android: paddingEnd = "8dp", чтобы лучше поддерживать макеты справа налево

Я сделал это в соответствии с рекомендациями, приведенными в этом блоге разработчиков android-разработчиков, который подразумевал, что нам не нужно было создавать новый макет-v17 файл, но он может просто использовать как paddingStart/End, так и атрибуты paddingLeft/Right (для продолжения поддержки нижнего minSdk требуется Left/Right).


Я только что сделал обновление для Android Studio 1.0 из предыдущей бета-версии и заметил новую ошибку lint, которая гласит:

  • Атрибут paddingStart, указанный здесь, может привести к сбою на некоторых определенных устройствах старше API 17 (текущий мин равен 7)

и предлагаемое исправление:

Переопределить ресурс в макете-v17

Это имеет смысл. Однако после создания layout-v17 и удаления неиспользуемого paddingStart/End из основной папки макета, оригинальные предупреждения Lint снова появились, сказав, что я должен использовать paddingStart/End. Похоже, что он не понимает, что я переопределил файлы в layout-v17.

Кто-нибудь знает, как решить то, что кажется противоречивым сообщениям об ошибках/предупреждениях Lint? Я знаю, что могу предупредить только tools:ignore, но я надеюсь на "правильное" решение.


Изменить (1/19/15): Существует проблема

Некоторые из вышеперечисленных ссылок предложили использовать папку layout-ldrtl для обработки направления rtl, вместо использования paddingStart и paddingEnd.

У меня также было предложение в другом месте переопределить LayoutInflator Factory2 всякий раз, когда вы обнаружите, что пользователь имеет планшет API16, а затем вручную устанавливает атрибуты всех ваших представлений. Это, безусловно, будет работать, но это кажется чрезвычайно "ручным".

У меня, к сожалению, нет доступа к одному из этих устройств, которые сбой, поэтому я не могу проверить, почему я не нашел никого в Интернете, предлагая просто поместить paddingStart в /layout -v17/folder и paddingLeft в /layout/? Действительно ли планшеты API16 Samsung по-прежнему продолжают сбой, несмотря на то, что paddingStart присутствует только в layout-v17?

4b9b3361

Ответ 1

Вы правы в корневой причине проблемы - Samsung определил пользовательский атрибут для id, зарезервированного для paddingStart или paddingEnd.

То, как я это передал, это извлечь свойства заполнения и поместить их в стиль. Поэтому вместо того, чтобы иметь разные макеты для SDK < 17 и SDK >= 17, у меня есть разные стили для них (с paddingLeft&Right в values и paddingStart&End в values-v17).

Таким образом, Lint перестанет жаловаться на это.

Ответ 2

Это просто предложение. Надеюсь, вы решили решить эту проблему. Если вы установите минимальный уровень SDK ниже 4.1, вы должны явно указать дополнение в качестве paddingLeft и paddingStart. Для уровня SDK выше 4.1 вы можете использовать paddingStart. Я предполагаю (поскольку я никогда не сталкивался с этим раньше), когда вы устанавливаете уровень SDK в 2.2 или ниже 4.1, уровень sdk для Android сходит с ума.