- 屏幕分辨率:屏幕分辨率就是手机屏幕的像素点数,指屏幕横竖各有多少个像素,一般描述成屏幕的“宽×高”。安卓手机屏幕常见的分辨率有 480×800、720×1280、1080×1920等,例如720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素。
- 屏幕大小:屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸大屏手机”,就是指对角线的尺寸为5英寸,5寸×2.54厘米/寸=12.7厘米。(一英寸 = 2.54厘米)
- 屏幕密度:屏幕密度就是每英寸的像素点数,数值越高当然显示越细腻。对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚。手机可以有相同的分辨率,但屏幕尺寸可以不相同。
- px:表示屏幕实际的象素。例如,320*480 的屏幕在横向有320个象素,在纵向有480 个象素。
- dp:一个基于density的抽象单位,随着密度变化,对应的像素数量也变化,但并没有直接的相对比例的变化。如果一个160dpi的屏幕,1dp=1px (在Android 距离主要使用dp作为单位 )
- sp : 字体主要使用sp作为单位
- in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54 厘米。例如,形容手机屏幕大小,经常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是3.2 英寸,表示手机的屏幕(可视区域)对角线长度是3.2*2.54 = 8.128 厘米。读者可以去量一量自己的手机屏幕,看和实际的尺寸是否一致。
- 屏幕分辨率 和 屏幕大小 决定了 屏幕密度(dpi)并且屏幕的密度 和 屏幕的分辨率成正比、和屏幕的大小成反比;
- 屏幕密度(dpi) 决定了 px 和 dp 之间的比例关系 当屏幕密度为160时,1px = 1dp
一般drawable文件夹下放入.9图片和我们创建的drawableXML资源文件,而工程中所用到的图片资源我们会根据不同手机的屏幕密度 放入对应的剩下的几个drawable文件夹下!对应关系如下:
dpi范围 | 密度 |
---|---|
0dpi ~ 120dpi | ldpi |
120dpi ~ 160dpi | mdpi |
160dpi ~ 240dpi | hdpi |
240dpi ~ 320dpi | xhdpi |
320dpi ~ 480dpi | xxhdpi |
480dpi ~ 640dpi | xxxhdpi |
float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;
小米5s 1920 x 1080 (高,宽)分辨率, 5.15 英寸的手机。
dpi是 428,在320dpi ~ 480dpi范围,属于xxhdpi。
准备的图片是 270 x 480 (宽,高)。
270 正好是 1080 的四分之一,在手机显示中,看到在xxh的图片的宽度基本和屏幕宽度的四分之一吻合, 所以,这个分辨率的图片,放在drawable-xxh文件夹中正合适。
查看图片在不同文件夹下加载后占用的宽度
I/iv_l:: 1080:1920
I/iv_m:: 810:1440
I/iv_h:: 540:960
I/iv_xh:: 405:720
I/iv_xxh:: 270:480
I/iv_xxxh:: 203:360
ldpi的最高dpi是 120,xxhdpi的最高dip是480,480是120的四倍,放在drawable-ldpi下的图片,在使用xxdpi的手机加载时正好放到了四倍,图片的宽正好由270放到到了1080。通过验证,放在不同文件夹下,使用不同dpi的手机加载时,图片被缩放的倍数关系就搞清楚了。
由于图片被放到后会占用更多的内存,如果UI只提供一份分辨率的图片,那么我们把图片优先放在drawable-xxhdpi文件夹下。
那么如果我们需要适配 (华为p6-t00)
dpi 315, 分辨率 720x1280
并且还想提供另一个分辨率的图片,那么分辨率大概是多少呢(需要我们提供给UI设计师切图)。
270 是 720的 1/3,
查看图片在不同文件夹下加载后占用的宽:高
I/iv_l:: 720:1280
I/iv_m:: 540:960
I/iv_h:: 360:640
I/iv_xh:: 270:480
I/iv_xxh:: 180:320
I/iv_xxxh::135:240
参考: https://blog.csdn.net/guolin_blog/article/details/50727753