如果您使用Android Studio 1.5.0中的矢量资源向导,则使用该向导导入的任何矢量可绘制XML都会进入res/drawable/
.
但是,build/
目录和生成的APK显示这些XML文件被移动到res/drawable-anydpi-v21/
资源目录中.该-v21
部分是有意义的,因为VectorDrawable
仅在API Level 21+上支持.但是,-anydpi
似乎没有证件.我-nodpi
原本期望,无论是原始导入目的地还是构建系统选择移动它的地方.
有没有人看到关于什么-anydpi
方式的正式声明,以及它与它的关系是-nodpi
什么?我正在寻找实际效果,而不仅仅是一些代码评论暗示的内容.
这些是与密度无关的资源.无论当前屏幕的密度如何,系统都不会缩放使用此限定符标记的资源.
例如:
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设备上,使用矢量.
在Lollipop(API 21)xhdpi设备上,使用向量.
参考注意:在更改Ic3288d0236fe0bff20bb1599aba2582c25b0db32中添加了anydpi.
的源代码包含以下注释(线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 Level 21中添加.
我使用drawable-nodpi作为一切,我有很多大图形."扩展"图形的一个未记录的后果是它会以指数方式增加内存使用量.因此,如果你有'drawable'的100M图形,它将缩放到400M或1.6G,具体取决于用户设备的分辨率.设备分辨率不断提升.当然,扩大规模实际上不会增加图形的"清晰度".无论如何,绘图操作可以指示图形相对于屏幕大小的大小,不需要使用多个绘图文件夹来膨胀应用程序.