-anydpi和-nodpi之间的区别是什么?
如果您在Android Studio 1.5.0中使用vector资产向导,则使用该向导导入的任何vector可绘制XML将进入res/drawable/
。
但是, build/
目录和生成的APK显示这些XML文件被移到了res/drawable-anydpi-v21/
resource目录中。 -v21
部分是有意义的,因为VectorDrawable
只支持API Level 21+。 然而, -anydpi
似乎是无证的。 我会预期-nodpi
,既是原始的import目的地,也是build造系统select移动它的地方。
有没有人看到官方的说法是什么-anydpi
意味着什么,它与-nodpi
关系是什么? 我正在寻找实际的效果,而不仅仅是一些代码的评论暗示。
nodpi
这些是密度无关的资源。 无论当前屏幕密度如何,系统都不会缩放使用此限定符标记的资源。
例如:
- drawable- nodpi /dot.png
点在xxhdpi上显示为小,在ldpi上显示为大。
但是,资源parsing器将匹配特定的限定符(如果存在)。
例如
- drawable- hdpi /eg.png
- drawable- nodpi -v21 / eg.xml
在棒棒糖(API 21)hdpi设备上,使用位图 。
在棒棒糖(API 21)xhdpi设备上,使用vector。
anydpi
这些资源优先于任何dpi。
例如
- drawable- hdpi /eg.png
- drawable- anydpi -v21 / eg.xml
在棒棒糖(API 21)hdpi设备上,使用vector 。
在棒棒糖(API 21)xhdpi设备上,使用vector。
最初的回应
以下是我最初从变更描述中理解的内容,但这不是我的设备的行为方式。 对于较老的SDK工具,这可能是正确的。
nodpi
不按预期工作 :但是,nodpi不优先。 例如,如果你有
- drawable- mdpi /eg.png
- drawable- hdpi /eg.png
- drawable- nodpi /eg.xml
然后
- 在mdpi上,框架将采用mdpi位图。
- 在xxxdpi上,框架将采用hdpi位图。
vector绘图的解决方法 :如果您想使用vector绘图,那么您必须运送:
- drawable- mdpi /eg.png
- drawable- mdpi /eg.xml
- drawable- hdpi /eg.png
- drawable- hdpi /eg.xml
anydpi
如果没有find完全相同的dpi,则框架select“anydpi”资源限定符添加更改Ic3288d0236fe0bff20bb1599aba2582c25b0db32 。
这对任何使用vector绘图的人来说都是巨大的。
现在,如果你有
- drawable- mdpi /eg.png
- drawable- hdpi /eg.png
- drawable- anydpi /eg.xml
然后
- 在mdpi上,框架将采用mdpi位图。
- 在xxxdpi上,该框架将采用该向量。
源代码包含以下注释(第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
:此限定符匹配所有屏幕密度,并优先于其他限定符。 这对vector绘图是有用的。 在API级别21中添加。