Skip to content

Instantly share code, notes, and snippets.

@aleien
Last active October 11, 2018 20:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aleien/715f3b2695d61116d51d819511254629 to your computer and use it in GitHub Desktop.
Save aleien/715f3b2695d61116d51d819511254629 to your computer and use it in GitHub Desktop.
Почему drawable, определенный по дефолту как vector, а v21 как animated-vector, будет отображаться по-разному в зависимости от значения supportVectorDrawable?

В общем, дело обстоит так. Когда ты определяешь ресурс с одним именем в разных папках, они раскладываются так, чтобы было понятно андроиду. Путь к этим файлам для разных конфигураций прописывается в файле resources.arsc, который лежит в apk.

Если определить drawable/avd.xml и drawable-v21/avd.xml (анимированный), для supportVectorDrawable=true они будут определены как: default=res/drawable/avd.xml (неанимированный) v21=res/drawable-v21.xml (анимированный)

А для supportVectorDrawable=false будут другие значения. anydpi-v21=res/drawable-anydpi-v21/avd.xml (неанимированный) v21=res/drawable-v21/avd.xml (анимаированный) xxhdpi=res/drawable-xxhdpi-v4/avd.png (api<=21, с другими dpi аналогично)

Когда ты прописываешь в xml в папке layout android:src="@drawable/avd.xml", андроид во время инфляции смотрит и разрешает какой конкретно файл изображения соответствует конфигурации лэйаута. Если у нас supportVectorDrawable=true и api>=21, то все хорошо, и берется, парсится и отображается файл res/drawable-v21.xml

Но если у нас supportVectorDrawable=false и api>=21, андроид делает выбор между drawable-anydpi-v21 и drawable-v21. Если этот drawable используется в дефолтной папке layout, то он выбирает drawable-anydpi-v21, потому что так задан приоритет у разных конфигураций

(типа это дефолт, и layout подходит под него, можешь тут глянуть небольшое объяснение https://gist.github.com/lopspower/7adbcde1d677c9d2f526)

Возможно, поэтому во всех примерах id у статичного и анимированного вектора отличаются друг от друга.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment