书接上回,这次将dp是怎么将视觉效果看起来一样的,如果这期看的稍微有些吃力,可以先看我的 上一篇文章 ? 这个链接可以点
计算屏幕显示效果
1920×1080
分辨率下,不同dpi
的设备,怎么算显示效果相同呢?像素数一样?
NO NO NO,答案: 是尺寸一样了,这很符合直觉,就像在现实世界里一样
我举个栗子
你手里的手机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
觉得写的不错,欢迎点赞,评论,分享!