-anydpi 和 -nodpi 有什么区别?
What Is The Difference Between -anydpi And -nodpi?
如果您在 Android Studio 1.5.0 中使用矢量资源向导,则您使用该向导导入的任何矢量可绘制对象 XML 都会进入 res/drawable/
。
但是,build/
目录和生成的 APK 显示那些 XML 文件被移动到 res/drawable-anydpi-v21/
资源目录中。 -v21
部分是有道理的,因为 VectorDrawable
仅在 API 级别 21+ 上受支持。但是,-anydpi
似乎没有记录。对于原始导入目的地和构建系统选择移动它的位置,我都希望 -nodpi
。
有没有人看过-anydpi
的官方说法,和-nodpi
有什么关系?我在寻找实际效果,而不仅仅是一些代码注释所暗示的。
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;
希望这能消除困惑。
点头
These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen's density.
例如:
- drawable-nodpi/dot.png
这个点在 xxhdpi 上会显得很小,在 ldpi 上会很大。
但是,资源解析器将匹配特定限定符(如果存在)。
例如
- drawable-hdpi/eg.png
- drawable-nodpi-v21/eg.xml
在 Lollipop (API 21) hdpi 设备上,使用 位图。
在 Lollipop (API 21) xhdpi 设备上,使用向量。
任何dpi
These resources take precedence in any dpi.
例如
- drawable-hdpi/eg.png
- drawable-anydpi-v21/eg.xml
在 Lollipop (API 21) hdpi 设备上,使用 向量。
在 Lollipop (API 21) xhdpi 设备上,使用向量。
参考
注意:anydpi 已添加到 change Ic3288d0236fe0bff20bb1599aba2582c25b0db32。
nodpi
:所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放标有此限定符的资源。
anydpi
:此限定符匹配所有屏幕密度并优先于其他限定符。这对于矢量绘图很有用。添加到 API 级别 21。
我对所有内容都使用 drawable-nodpi,包括我的游戏的大量大型图形。使用 -anydpi 放大图形的一个未记录的结果是它以指数方式增加内存使用。因此,如果您在 drawable 中有一个 1MB 的图形,它将根据用户设备的分辨率缩放到 4MB、16MB、64MB 或更多。设备分辨率不断提高。当然,这种放大实际上并没有增加图形的清晰度。无论如何,绘图操作可以指示每个图形相对于屏幕尺寸的大小,无需使应用程序膨胀。也没有多个分辨率特定的绘制文件夹。
如果您在 Android Studio 1.5.0 中使用矢量资源向导,则您使用该向导导入的任何矢量可绘制对象 XML 都会进入 res/drawable/
。
但是,build/
目录和生成的 APK 显示那些 XML 文件被移动到 res/drawable-anydpi-v21/
资源目录中。 -v21
部分是有道理的,因为 VectorDrawable
仅在 API 级别 21+ 上受支持。但是,-anydpi
似乎没有记录。对于原始导入目的地和构建系统选择移动它的位置,我都希望 -nodpi
。
有没有人看过-anydpi
的官方说法,和-nodpi
有什么关系?我在寻找实际效果,而不仅仅是一些代码注释所暗示的。
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;
希望这能消除困惑。
点头
These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen's density.
例如:
- drawable-nodpi/dot.png
这个点在 xxhdpi 上会显得很小,在 ldpi 上会很大。
但是,资源解析器将匹配特定限定符(如果存在)。
例如
- drawable-hdpi/eg.png
- drawable-nodpi-v21/eg.xml
在 Lollipop (API 21) hdpi 设备上,使用 位图。
在 Lollipop (API 21) xhdpi 设备上,使用向量。
任何dpi
These resources take precedence in any dpi.
例如
- drawable-hdpi/eg.png
- drawable-anydpi-v21/eg.xml
在 Lollipop (API 21) hdpi 设备上,使用 向量。
在 Lollipop (API 21) xhdpi 设备上,使用向量。
参考
注意:anydpi 已添加到 change Ic3288d0236fe0bff20bb1599aba2582c25b0db32。
nodpi
:所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放标有此限定符的资源。
anydpi
:此限定符匹配所有屏幕密度并优先于其他限定符。这对于矢量绘图很有用。添加到 API 级别 21。
我对所有内容都使用 drawable-nodpi,包括我的游戏的大量大型图形。使用 -anydpi 放大图形的一个未记录的结果是它以指数方式增加内存使用。因此,如果您在 drawable 中有一个 1MB 的图形,它将根据用户设备的分辨率缩放到 4MB、16MB、64MB 或更多。设备分辨率不断提高。当然,这种放大实际上并没有增加图形的清晰度。无论如何,绘图操作可以指示每个图形相对于屏幕尺寸的大小,无需使应用程序膨胀。也没有多个分辨率特定的绘制文件夹。