美文网首页
对Android 中 px、DPI、dp(dip)、densit

对Android 中 px、DPI、dp(dip)、densit

作者: 面包_c53f | 来源:发表于2020-01-08 16:09 被阅读0次

1:px

像素。一般说一个手机的分辨率为1280*720,意思就是宽度为720像素,高度为1280像素。

但是,安卓的适配不能用这种方式。

比如一个840*360的屏幕和一个1280*720的屏幕,我做了一个180px宽的布局,那么在第一个屏幕上就占据一半的宽度,在第二个屏幕上会只占据1/4的宽度。这样无法达到适配要求。

2:DPI

既然px不能作为适配的单位,所以引入了DPI的概念。(Dots Per Inch)每英寸的点数。

举例:现在规定有两个手机,尺寸一样。都是宽度为2英寸,高度为3.5英寸(瞎举的,高度咋滴都行)

第一个手机的分辨率为:840*360。也就是在2英寸的屏幕上,有360个像素点,那么每英寸的像素点就是180个。

第二个手机的分辨率为:1280*720.也就是在2英寸的屏幕上,有720个像素点,那么每英寸的像素点就是360个。

个数就是DPI

3:dp

然后引入了dp的概念,这个dp和屏幕分辨率就木有关系了,只和DPI有关系

规定是:当dpi为160时,1dp = 1px;

以此类推:当dpi为320时,1dp = 2px;

1dp = dpi/160 px;

那么,用dp来适配,

还是那两个屏幕,840*360的DPI为180,1280*720的DPI为360.现在来做一个宽为80dp的div吧

第一个屏幕:1dp = (180/160)px = 1.125px; 80dp = 90px

第二个屏幕:1dp = (360/160)px = 2.25px;  80dp = 180px;

都是对应屏幕的1/4宽。这样也就达到了适配的目的。

4:density

这个密度的值,其实就是dpi/160的值。

诶?上面说1dp = dpi/160 px.那么,1dp = density px 

在安卓中,提供了获取density的方法

getResources().getDisplayMetrics().density

这样,也就实现了dp和px的换算

话说为啥要换算dp和px呢?

因为,xml中既可以用px,也可以用dp

但是java代码中,很多布局相关的单位都是px,比如:

LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

layoutParams.setMargins(10,20,30,40);

这里的margins的四个参数left,top,right,bottom的单位都是px,得换成dp

相关文章

网友评论

      本文标题:对Android 中 px、DPI、dp(dip)、densit

      本文链接:https://www.haomeiwen.com/subject/rkpkuxtx.html