- anydpi 和-nodpi 有什么区别?

如果您在 Android Studio 1.5.0中使用 Vector Asset 向导,那么使用该向导导入的任何向量可绘制 XML 都将进入 res/drawable/

但是,build/目录和生成的 APK 显示这些 XML 文件被移动到 res/drawable-anydpi-v21/资源目录中。-v21部分是有意义的,因为 VectorDrawable只在 API Level 21 + 上受支持。然而,-anydpi似乎没有文档记录。我期望 -nodpi,无论是对于最初的导入目的地,还是对于构建系统选择移动它的位置。

有没有人看到官方声明什么 -anydpi的意思,它是什么关系是与 -nodpi?我寻找的是实际效果,而不仅仅是一些代码注释暗示的效果。

55534 次浏览

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;

希望这能消除你的疑惑。

诺比

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

例如:

  • drawable-诺比/dot.png

点在 xxhdpi 上显示为小点,在 ldpi 上显示为大点。

但是,如果存在特定的限定符,则资源解析器将与其匹配。

比如说

  • 可绘制的 -Hdpi/eg.png
  • Draable-诺比-v21/eg.xml

在棒棒糖(API 21) hdpi 设备上,使用 位图

在棒棒糖(API 21) xhdpi 设备上,使用向量。

任何事情

这些资源在任何 dpi 中都具有优先权。

比如说

  • 可绘制的 -hdpi/eg.png
  • Draable-任何事情-v21/eg.xml

在棒棒糖(API 21) hdpi 设备上,使用 矢量

在棒棒糖(API 21) xhdpi 设备上,使用向量。

参考文献

注意 : 在 更改 Ic3288d0236fe0bff20bb1599aba2582c25b0db32中添加了 anydpi。

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

anydpi : 此限定符匹配所有屏幕密度,并优先于其他限定符。这对于向量绘图非常有用。在 API 等级21中添加。

我使用可绘制的节点为一切,包括大量的图形为我的游戏。使用 -anydpi 扩展图形的一个未记录的后果是,它以指数方式增加内存使用。因此,如果您有一个1 MB 的可绘制图形,它将按比例缩放到4 MB,16 MB,64 MB,或更多,这取决于用户设备的分辨率。而且设备分辨率一直在上升。当然,这种放大实际上并不能提高图像的清晰度。正常情况下,绘图动作可以指导每个图形应该有多大,相对于屏幕大小无论如何,没有必要膨胀的应用程序。我不使用多分辨率的特定绘制文件夹,以节省内存和管理,虽然这些您至少有一些统治的分配。恕我直言,-anydpi 文件夹是一个伪装成方便的陷阱。