Android屏幕适配相关知识

大部分资料摘自CSDN大神郭霖的博客和公众号文章

dpi (dot per inch)

表示屏幕密度,是指每英寸上的像素点数。


dp: 同称dip(density independent pixel 直译“密度无关像素”)
在Android中,将屏幕密度为160dpi的中密度设备作为基准屏幕。
其他屏幕密度换算比例如下:
密度
ldpi
mdpi
hdpi
xhdpi
xxdpi
xxxhdpi
dpi范围
0-120
120-160
160-240
240-320
320-480
480-640
典型示例

320*480
480*800
1280*720
1920*1080
2560*1440
屏幕密度 0.75 1 1.5 2 3
4
整数比例
3
4
6
8
12
16
【注】表格中的示例只做参考,不能当为标准!例如480*800在3.3-4.0寸的手机上算hdpi,但是在4.8-5.5寸的手机上就算mdpi
换算举例:如果需求中要求一张icon在所有分辨率下所占有的dp值一样,以mdpi为基准,假设为48*48,按照m:h:xh:xxh:xxxh的整数比例2:3:4:6:8来换算,h为72*72,xh为96*96,xxh为144*144,xxxh为192*192

sp(scale-independent pixel)
与dp类似,常用于文字大小设置,但是在安卓手机系统设置调节字号的时候,文字跟随改变,当设置为“普通”字号时,sp与px之间的尺寸换算和dp与px之间的尺寸换算是一样的

屏幕尺寸

设备的物理屏幕尺寸,指屏幕的对角线的长度,单位是英寸,1 inch = 2.54 cm。比如“5寸大屏手机”,就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。


屏幕分辨率

也叫显示分辨率,是屏幕图像的精密度,是指屏幕或者显示器所能显示的像素点有多少。一般以横向像素×纵向像素表示分辨率,如1200×1920表示此屏幕在宽度方向有1200个像素,在高度方向有1920个像素。


屏幕密度

是指每英寸上的像素点数,单位是dpi(dot per inch)或者ppi(pixels per inch),数值越高显示越细腻。屏幕密度与屏幕尺寸和屏幕分辨率有关。例如在屏幕尺寸一定的条件下,屏幕分辨率越高屏幕密度越大,反之越小。同理在屏幕分辨率一定的条件下,屏幕尺寸越小屏幕密度越大,反之越小。

计算示例:1920*1080分辨率的5寸手机,对角线分辨率约为2203,则屏幕密度dpi为2203/5≈400dpi
【注】上面的出现的0.75,1,1.5,2,3,4才是屏幕密度(density)。而120,160,240,320,480,640是屏幕密度dpi(densityDpi)。


实际密度与系统密度

实际密度:就是我们自己算出来的密度,这个密度代表了屏幕真实的细腻程度,如上述例子中的400dpi就是实际密度,说明这块屏幕每寸有400个像素。

系统密度:每部Android手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、480,这些就是Android为不同设备设定的系统密度。

得到实际密度以后,一般会选择一个最近的密度作为系统密度,系统密度是出厂预置的,如440dpi的系统密度就是和它最接近的480dpi;如果是330dpi的设备,它的系统密度就是320dpi。但是,现在很多手机不一定会选择这些值作为系统密度,而是选择实际的dpi作为系统密度,这就导致了很多手机的dpi也不是在这些值内。例如小米Note这样的xxhdpi的设备他的系统密度并不是480,而是它的实际密度440。


获取设备的上述属性

Android系统中有个DisplayMetrics的类,通过这个类就可以得到上述的所有属性。

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float density = displayMetrics.density; //屏幕密度
int densityDpi = displayMetrics.densityDpi;//屏幕密度dpi
int heightPixels = displayMetrics.heightPixels;//屏幕高度的像素
int widthPixels = displayMetrics.widthPixels;//屏幕宽度的像素
float scaledDensity = displayMetrics.scaledDensity;//字体的放大系数
float xdpi = displayMetrics.xdpi;//宽度方向上的dpi
float ydpi = displayMetrics.ydpi;//高度方向上的dpi



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值