书接上回,这次将dp是怎么将视觉效果看起来一样的,如果这期看的稍微有些吃力,可以先看我的 上一篇文章 👈 这个链接可以点
计算屏幕显示效果
1920×1080 分辨率下,不同dpi的设备,怎么算显示效果相同呢?像素数一样?
NO NO NO,答案: 是尺寸一样了,这很符合直觉,就像在现实世界里一样,你我看同一个东西,尺寸是一样的!
这么神奇?
我举个 栗子 来计算出 dp 是如何让我们的视觉效果达到一致的
你手里的手机dpi是440,而平板为213
我们想要计算出实际显示的长度(单位:英寸),就是要计算出它占几个像素,然后除以 dpi 就可以了
计算过程
假设需要显示一个150dp的长度,实际显示长度为
dpi计算方法:
dp值转化为像素数:
这样我们就算出来了占几个像素
手机150dp的视觉尺寸为:
,所以,视觉尺寸为,显然跟dpi根本没关系
所以在默认情况下,我们的手机尺寸dpi并不会影响显示效果,他总会显示相同的大小的尺寸,就跟现实世界一样
这一点很多直觉敏锐的小伙伴肯定在dp和px转化的时候就发觉了,,当dpi变大的时候,也就是单位长度的像素数变多的时候,1dp占的px也越多,dpi变为两倍,一英寸里的像素数也变成两倍,1dp也就变为了原来的两倍像素数,换算过来显示的物理长度并没有变化。
由此可见,忽略掉dpi计算时候的取整,可以说用dp可以完完全全保证显示效果的一致性。
思考:
为啥我们看的很多界面显示效果不一致?
**答案:**那是因为APP为相同控件配置了不同dpi下或者不同分辨率下,不同的宽高等数值
例如:
例子一( sw最小宽度 )
values-sw1281dp,values-sw1537dp,values-sw1921dp,values
screenWidth在[0,1280],单位dp时,读取values里的数据
screenWidth在[1281,1536],单位dp时,读取values-sw1281dp里的数据
screenWidth在[1537,1920],单位dp时,读取values-sw1537dp里的数据
screenWidth在[1921,∞],单位dp时,读取values-sw1921dp里的数据
例子二( 不同等级dpi )
values-ldpi,120dpi
values-mdpi,160dpi
values-hdpi,240dpi
values-xhdpi,320dpi
values-xhdpi,480dpi
values-nodpi,任何dpi
values-tvdpi,约213dpi
这一部分可以去看官方文档,里面讲的很全面,我补充两点官方文档上不容易看出来的信息
dpi后缀是看物理实际分辨率的,接近那个算哪个
这里可以看到物理dpi为300,但是我覆盖dpi为440,它依旧会读取xhdpi的数据,因为300距离320最近
-
res的文件夹可以添加的后缀有很多,记不住怎么办Android Studio新建的时候可以选择
OVER
觉得写的不错,欢迎点赞,评论,分享!