android -anydpi和-nodpi有什么区别?

ru9i0ody  于 2023-05-27  发布在  Android
关注(0)|答案(4)|浏览(540)

如果您在Android Studio 1.5.0中使用矢量资源向导,则使用该向导导入的任何矢量可绘制XML都会进入res/drawable/
但是,build/目录和生成的APK显示这些XML文件被移动到res/drawable-anydpi-v21/资源目录中。-v21部分是有意义的,因为VectorDrawable仅在API Level 21+上受支持。但是,-anydpi似乎没有文档记录。我希望-nodpi,无论是对于原始导入目的地还是构建系统选择将其移动到的位置。
有没有人看到过关于-anydpi的官方声明,以及它与-nodpi的关系?我在寻找实际的效果,而不仅仅是一些代码注解所暗示的。

55ooxyrt

55ooxyrt1#

节点

这些是密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放使用此限定符标记的资源。
例如:

  • drawable-nodpi/dot.png

这个点在xxhdpi上看起来小,在ldpi上看起来大。
但是,如果存在特定的限定符,则资源解析程序将匹配该限定符。
比如说

  • drawable-hdpi/eg.png
  • drawable-nodpi-v21/eg.xml

在Lollipop(API 21)hdpi设备上,使用位图
在Lollipop(API 21)xhdpi设备上,使用向量。

anydpi

这些资源在任何dpi中优先。
比如说

  • drawable-hdpi/eg.png
  • drawable-anydpi-v21/eg.xml

在Lollipop(API 21)hdpi设备上,使用vector
在Lollipop(API 21)xhdpi设备上,使用向量。

参考

niknxzdl

niknxzdl2#

我用drawable-nodpi做所有的事情,包括我的游戏中大量的大型图形。使用-anydpi扩展图形的一个未记录的后果是它会成倍增加内存使用。因此,如果您在drawable中有一个1 MB的图形,它将根据用户设备的分辨率缩放到4 MB,16 MB,64 MB或更多。设备分辨率不断提高。当然,这种放大实际上并没有增加图形的清晰度。通常情况下,绘图操作可以直接指示每个图形应该相对于屏幕大小有多大,而不需要膨胀应用程序。我不使用多个分辨率特定的绘制文件夹,以保存内存和内务管理。

vq8itlhq

vq8itlhq3#

source code包含以下注解(第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;

希望这能消除困惑。

8zzbczxx

8zzbczxx4#

nodpi:所有密度的资源。这些是密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放使用此限定符标记的资源。
anydpi:此限定符匹配所有屏幕密度并优先于其他限定符。这对于矢量可绘制对象非常有用。在API Level 21中添加。

相关问题