В чем разница между -anydpi и -nodpi?
Если вы используете мастер векторных активов в Android Studio 1.5.0, любой XML-файл векторной графики, который вы импортируете с помощью этого мастера, попадает в res/drawable/
,
Тем не менее build/
каталог, и полученный APK показывает, что эти файлы XML перемещаются в res/drawable-anydpi-v21/
каталог ресурсов. -v21
часть имеет смысл, так как VectorDrawable
поддерживается только на уровне API 21+. Тем не мение, -anydpi
кажется недокументированным. Я бы ожидал -nodpi
как для исходного места назначения импорта, так и для места, где система сборки выбирает его перемещение.
Кто-нибудь видел официальные заявления для чего -anydpi
значит, и каковы его отношения -nodpi
? Я ищу практические эффекты, а не только то, на что намекают некоторые комментарии кода.
4 ответа
nodpi
Это независимые от плотности ресурсы. Система не масштабирует ресурсы, помеченные этим классификатором, независимо от плотности текущего экрана.
Например:
- drawable- nodpi /dot.png
Точка будет выглядеть маленькой на xxhdpi, большой на ldpi.
Однако распознаватель ресурсов будет соответствовать определенному квалификатору, если он существует.
Например
- drawable- hdpi /eg.png
- drawable- nodpi -v21 / eg.xml
На устройстве hdpi Lollipop (API 21) используется растровое изображение.
На устройстве Lollipop (API 21) xhdpi используется вектор.
anydpi
Эти ресурсы имеют приоритет в любом dpi.
Например
- drawable- hdpi /eg.png
- drawable- anydpi -v21 / eg.xml
На устройстве Lollipop (API 21) hdpi используется вектор.
На устройстве Lollipop (API 21) xhdpi используется вектор.
Ссылка
Примечание: anydpi было добавлено в изменение Ic3288d0236fe0bff20bb1599aba2582c25b0db32.
Я использую drawable-nodpi для всего, и у меня много большой графики. Одно недокументированное последствие "масштабирования" вашей графики - это экспоненциальное увеличение использования памяти. Таким образом, если у вас есть 100-мегабайтная графика в "рисованном виде", она будет масштабирована до 400 Мб или 1,6 Гб в зависимости от того, насколько высоко разрешение пользовательского устройства. И разрешения устройств продолжают расти. Конечно, такое увеличение не увеличивает "четкость" графики. Действия рисования могут указывать, насколько большой должна быть графика в зависимости от размера экрана, нет необходимости раздувать приложение несколькими папками рисования.
Исходный код содержит следующие комментарии (строка 639):
/**
* Value for {@link #densityDpi} for resources that scale to any density (vector drawables).
* {@hide}
*/
public static final int DENSITY_DPI_ANY = 0xfffe;
/**
* Value for {@link #densityDpi} for resources that are not meant to be scaled.
* {@hide}
*/
public static final int DENSITY_DPI_NONE = 0xffff;
Надеюсь, что это устранит путаницу.
nodpi
: Ресурсы для всех плотностей. Это независимые от плотности ресурсы. Система не масштабирует ресурсы, помеченные этим классификатором, независимо от плотности текущего экрана.
anydpi
: Этот классификатор соответствует всем значениям плотности экрана и имеет приоритет перед другими классификаторами. Это полезно для векторных рисунков. Добавлено в API уровня 21.