Метод getResourceId для TypedArray

Я читаю документы об методе getResourceId(). В нем говорится, что:

Получает идентификатор ресурса для атрибута по индексу. Заметка этот ресурс атрибута разрешен, если общий объект TypedArray извлекается. В результате эта функция вернет ресурс идентификатор конечного значения ресурса, который был найден, не обязательно исходный ресурс, указанный атрибутом.

Итак,

  • первый абзац ясен:

Получает идентификатор ресурса для атрибута в индексе.

  • также ясно второе:

Обратите внимание, что ресурс атрибута разрешен, когда общий TypedArray объект извлекается.

  • , но что означает 3 абзаца? , почему он может возвращать не обязательно исходный идентификатор ресурса?

В результате эта функция вернет идентификатор ресурса конечная ценность ресурса, которая была найдена, не обязательно оригинальная ресурс, указанный атрибутом.

8
задан GPack 04 июня '16 в 12:09
источник поделиться
2 ответов

Из документация:

TypedArray obtainStyledAttributes (AttributeSet set, 
                int[] attrs, 
                int defStyleAttr, 
                int defStyleRes)

....

При определении окончательного значения определенного атрибута четыре входа, которые входят в игру:

  • Любые значения атрибутов в заданном наборе атрибутов.
  • Ресурс стиля, указанный в AttributeSet (называемый "стиль" ).
  • Стиль по умолчанию, заданный defStyleAttr и defStyleRes
  • Базовые значения в этой теме.
4
ответ дан Kaamel 14 июня '16 в 21:54
источник поделиться

Это связано с тем, что "Слияние ресурсов" должно произойти до получения TypedArray.

Система построения Gradle -base использует новый механизм слияния для Ресурсы. В предыдущей системе сборки слияние осуществлялось путем передачи список папок ресурсов для aapt, которые выступали в качестве наложений, наряду с -auto-add-overlay для обеспечения того, чтобы новые ресурсы в оверлеях будет автоматически добавлено (поведение по умолчанию для наложений - это только переопределять существующие ресурсы, а не создавать новые).

Одной из целей системы сборки на основе Gradle было предоставление большего количества гибкость и один часто задаваемый запрос функции - это способность иметь несколько каталогов ресурсов. aapt не способен обрабатывать так что новая система сборки вводит новый механизм слияния, который запускается впереди aapt и генерирует одну, объединенную, папку ресурсов который подается в aapt. Преимущество такого слияния заключается в том, что инкрементный, как через обнаружение изменений ввода/вывода Gradle, так и в способе его реализации (т.е. он может перезапустить слияние только применение изменения в одном файле).

Объединенные ресурсы поступают из трех типов источников:

  • Основные ресурсы, связанные с основным источником, обычно расположены в src/main/res
  • Вариант наложения, исходящий из типа сборки и вкуса.
  • Зависимости Библиотечного проекта, которые вносят ресурсы через запись res в их пакете aar.

Например. Если вы используете разные productFlavors или buildTypes, у вас могут быть разные ресурсы для каждого аромата. Таким образом, тот, который первоначально был установлен во время разработки, может отличаться от того, что фактически представлено после изменения вкуса.

1
ответ дан AndroidMechanic 09 июня '16 в 9:24
источник поделиться

Другие вопросы по меткам