-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中添加。