В чем разница между-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? Я ищу практические эффекты, а не только то, на что намекают некоторые комментарии к коду.

765   4  

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

    Ничего не найдено.