屏幕尺寸、分辨率和dpi知识点总结

知识1.adb命令查看设备的分辨率和dpi

adb shell dumpsys window displays

WEBRESOURCEd3424dac3f27a5f970c9cd240e5acc62

知识2.概念

屏幕尺寸:指屏幕的对角线长度,单位是英寸,1英寸等于2.54厘米,常见尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等。

屏幕分辨率:指在纵横向上的像素点数,单位是px,1px为一个像素点,一般格式为纵向像素*横向像素,如1960*1080。

屏幕像素密度:相同尺寸情况下,分辨率越高,屏幕越清晰,即屏幕像素密度越大。屏幕像素密度指每英寸上面的像素点个数,单位是dpi,是“dot per inch”的缩写,计算方式如下图:

WEBRESOURCE63161f52e319014ae7affcafee17e197

密度无关像素:单位dip或dp,是Density Independent Pixels的缩写,Android规定,在屏幕像素密度为160dpi的情况下,1dp=1px。而在像素密度为320dpi的情况下,1dp=2px,以此类推。计算公式:1dp=(像素密度/160dpi)*1px。

sp:全称cale-independent pixels,与dp类似,用于设置字体大小。设置布局时,使用dp和sp(字体),不要直接使用px,这样才能保证屏幕适配。

知识3.sw-xxxx-dp的计算公式 

Android应用里,大家一定饱受各种layout-sw480dp layout-sw600dp-land layout-sw720dp-port之苦,往往不知道自己的平板加载的是哪个Layout而不得不一个个尝试,网上一大堆说不清的教程。本人查阅很多资料,给大家分享一种计算方法确定自己平板所加载哪个dp的资源。事实上,sw不是software的,意思,我猜是shortest width,最短的宽度。sw-xxxx-dp的计算公式是  sw *160/dpi

比如 1280*800, sw 是800     480*800, sw 是480

如下范例,相信可以更好理解计算方法,其中dpi其实是人为在Android/device/softwinner/astar-common/astar-y3.mk中设定的,没有Android源码的可以通过 adb shell getprop ro.sf.lcd_density 获得

WEBRESOURCEb4a6c09c92f9a4f8ca534d14c29fa3d1

通过公式 sw*160/dpi 计算出结果之后,选择一个比这个结果小,而又最接近这个值的dp。比如,范例中H7(Android 5.1)算出来是540.84,如果你的layout下存在一个 sw480dp,那这里dp肯定是sw480dp,如果没有sw480dp,只能找到sw340dp.land是横屏,port是竖屏。

知识4.修改dpi

方法(1)修改/system/build.prop文件的r0.sf.lcd_density属性(pull出来再push进/system,部分设备用该方法,机器死机)

直接在/system路径下vi修改方法

方法(2)adb shell wm density 2133380输入wm可能aborted,需要adb shell 之后,suX回车(大写的X),然后再执行wm density 213

知识5.mdpi和xhdpi等的区别

在安卓中,系统密度为160dpi的中密度手机屏幕为基准屏幕,即320×480的手机屏幕。

image

注意:如果手机屏幕分辨率是1080*1920,但屏幕像素密度是160dpi,图片应该放在mdpi目录中

2+