В чем разница между-anydpi и-nodpi?
если вы используете мастер векторных активов в Android Studio 1.5.0, любой вектор drawable XML, который вы импортируете с помощью этого мастера, переходит в res/drawable/.
на
build/ каталог, и полученный APK показывает, что эти XML-файлы перемещаются в res/drawable-anydpi-v21/ каталог ресурсов. Элемент -v21 часть имеет смысл, так как VectorDrawable поддерживается только на уровне API 21+. Однако,-anydpi кажется, без документов. Я бы ожидал -nodpi, как для исходного пункта назначения импорта, так и для где система сборки выбирает, чтобы переместить его.кто-нибудь видел официальные заявления за то, что -anydpi значит, и какая у него связь с -nodpi? Я ищу практические эффекты, а не только то, на что намекают некоторые комментарии к коду.
4 ответов:
nodpi
это независимые от плотности ресурсы. Система не масштабирует ресурсы, помеченные этим классификатором, независимо от плотности текущего экрана.
например:
- drawable -nodpi/точка.png
точка будет казаться маленькой на xxhdpi, большой на ldpi.
однако сопоставитель ресурсов будет соответствовать определенному квалификатору, если он существует.
для экземпляр
- drawable -hdpi/ЭГ.png
- drawable -nodpi - v21 / например.xml
на устройстве Lollipop (API 21) hdpi,точечный это.
на устройстве Lollipop (API 21) xhdpi используется вектор.
anydpi
эти ресурсы имеют приоритет в любом dpi.
для экземпляр
- drawable -hdpi/ЭГ.png
- drawable -anydpi - v21 / например.xml
на устройстве Lollipop (API 21) hdpi,вектор это.
на устройстве Lollipop (API 21) xhdpi используется вектор.
ссылка
Примечание: anydpi был добавлен в изменить Ic3288d0236fe0bff20bb1599aba2582c25b0db32.
на исходный код содержит следующие комментарии (строка 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.
Я использую drawable-nodpi для всего, и у меня есть много большой графики. Одним из недокументированных последствий "масштабирования" вашей графики является то, что она увеличивает использование памяти экспоненциально. Таким образом, если у вас есть 100M graphic в "drawable", он будет масштабироваться до 400M или 1.6 G в зависимости от того, насколько высокое разрешение пользовательского устройства. И разрешения устройства продолжают расти. Это масштабирование на самом деле не увеличивает "резкость" графики, конечно. Действия рисования могут указывать, насколько велика графика должно быть по отношению к размеру экрана в любом случае, не нужно раздувать приложение с несколькими папками рисования.
Comments