本篇属于实验性内容,只为自我确定问题之用。
1 前期准备
在每个drawable
文件夹中放置相应的同名资源文件,而只是资源文件做了些许更改。
如下图pic1.png
,每张图都做了一个对应文件夹的标记,如hdpi
。
2 实验
我使用的测试机信息如下
density: 2.75
densityDpi: 440
获取这些信息的代码如下:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("zp_test", "density: " + metrics.density);
Log.d("zp_test", "densityDpi: " + metrics.densityDpi);
而drawable
资源文件夹与相应的dpi
之间的关系如下:
drawable | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi |
---|---|---|---|---|---|
density | 1 | 1.5 | 2 | 3 | 4 |
densityDpi | 160 | 240 | 320 | 480 | 640 |
运行程序后,最终在手机上显示的是xxhdpi
文件夹中的图。由此可知,手机会去寻找相对应的资源文件进行匹配。
但问题又来了,densityDpi
如果为340
,那是匹配xhdpi
还是xxhdpi
呢?我们直接看Google官方文档的介绍:
不同dpi选择drawable方案.jpg
由上图可知,densityDpi
为340
,匹配的也是xxhdpi
文件夹中的内容。这其实很好理解,340
如果匹配xhdpi
文件夹,那么图片在设备上显示时,需要放大,可能引起模糊。
至于为什么会放大,下篇Android 基础篇 — 放不同drawable文件夹同图片的大小来具体介绍。以后争取做到一篇文章只解决一个具体应用问题。
官方文档地址:支持不同的像素密度