美文网首页
dp px和设备密度

dp px和设备密度

作者: 魂之挽歌w | 来源:发表于2017-12-13 16:24 被阅读23次

px(pixels)像素:每一个像素对应屏幕上的每一个点

dp(设置独立像素):一种基于屏幕密度的抽象单位,在每英寸160点的显示器上,1dp=1px

其设备密度也为1。dp=px/设备密度(float   density=getContext().getResources().getDisplayMetrics().density;)

为解决Android设备碎片化,引入一个概念density,也就是密度.它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dots per inch,每英寸像素数)作为单

位.比如设备分辨率为240x320,屏幕物理尺寸为1.5英寸x2英寸(对角线为2.5)它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度为160dpi。算对角线也是一样

的,长的平方+宽的平方=160000,开方后=400.可知400/2.5=160.对于用户来说,密度越大的屏幕显示效果越精细,因为每英寸显示的像素数量更多。

以上的描述就是一个蓝本(此蓝本对应于mdpi).

按照此蓝本一个dp相当于160dpi屏幕中的一个px.同理在,在320dpi的屏幕中,一个dp相当于2个px.

通过这样的成比例放缩,Android解决了需要多个不同屏幕中的大小显示问题.

所以在Eclipse的布局文件中,以3.7in WVGA(Nexus One)(480x800)为例,可以看见其为sw320dp,h533dp.

即宽有320dp,高为533dp.

是怎么计算出来的呢?

将(480的平方+800的平方)开方=932.9523031

然后932.9523031/屏幕尺寸3.7=252.14927,此结果为此手机的屏幕密度.

然后按照上面的蓝本,就应该要计算在该手机上1dp对于多少px.计算如下:

160              1dp=1px

252.14927        1dp=?px

结果为:

252.14927/160=1.5759329

注意:

在此一般不取1.5759329,只取到1.5即可.

所以:480/1.5=320;800/1.5=533.3333(通常取为533),即上述的sw320dp,h533dp.

手机屏幕密度的对应关系

120上下浮动的都属于ldpi

160上下浮动的都属于mdpi

240上下浮动的都属于hdpi

320上下浮动的都属于xdpi

以摩托罗拉ME525+(3.7英寸 分辨率854x480像素)为例:

将(480的平方+854的平方)开方=979.6509

然后979.6509/屏幕尺寸3.7=264.770529,此结果为此手机的屏幕密度.对应为hdpi

264.770529/160=1.6548

即在此手机中1dp=1.6548个像素,只取到1.6即可

所以:480/1.6=300;854/1.6=533.75(通常取为533)

按照这个逻辑,算出来的宽应该是只有300dp.悲剧的是,如果某个控件的宽为300,在此手机上是不能铺满手机的宽的.

也就是说除以的不是1.6而还是1.5!!!!所以将宽设置为320即可

总结:在hdpi中,像素转换为dp统一用的是:像素/1.5

以联想K860(5.0英寸,分辨率1280x720像素)为例:

将(1280的平方+720的平方)开方=1468.60478

然后1468.60478/屏幕尺寸5=293.720,此结果为此手机的屏幕密度.对应为xdpi

293.720/160=1.8357

即在此手机中1dp=1.8357个像素

所以:1280/1.8357=697.281;720/1.8357=392.22

按照这个逻辑,算出来的宽应该是392.22.悲剧的是,如果某个控件的宽为392.22,在此手机上是显示不完全的.

也就是说除以的不是1.8而是2!!!!所以将宽设置为360即可

总结:在xdpi中,像素转换为dp统一用的是:像素/2

参考资料:

http://blog.sina.com.cn/s/blog_865366f801018w6k.html

注意问题1:

在建立模拟器的时候注意

854x480在Hardware中,应该将Abstracted LCD density设置为240,并手动输入分辨率

1280x720在Hardware中,应该将Abstracted LCD density设置为320,并手动输入分辨率

注意问题2:

多个layout文件夹在命名上有相应规则,以分辨率480x854为例,需要建立480x854像素的layout文件夹,命名:layout-854x480,有两点需要注意:①大数(854)必须在前,

否则会报错;②两个数字之间的符号是小写英文字母“x”,不是乘号

PS:

关于多分辨率的适配可以参考以下文章

http://blog.csdn.net/lmj623565791/article/details/45460089

http://blog.csdn.net/zhaokaiqiang1992/article/details/45419023

相关文章

  • dp px和设备密度

    px(pixels)像素:每一个像素对应屏幕上的每一个点 dp(设置独立像素):一种基于屏幕密度的抽象单位,在每英...

  • 自定义控件

    dp、sp和px px:像素,不同设备不同的显示屏显示效果是相同的 dp:与“像素密度”密切相关。 什么是像素密度...

  • 五分钟掌握Android屏幕知识点

    关于PX、PT、PPI、DPI、DP 其中px, pt, dp为长度单位,ppi和dpi为密度单位 | 密度 | ...

  • 探究安卓px/dp/dip/dpi/ppi/sp/density

    dp=(160/ 像素密度值)px so, xhdpi时,dp=1/2px;xxhdpi时,dp=1/3px; l...

  • Android语言开发第三章笔记

    1.dp,sp和px px:像素点 dp:与像素密度密切相关(完善手机像素比) sp:相当于dp(是用来...

  • Android-屏幕适配总结

    一、基本概念 1.dp 等于dip,设备密度无关像素 2.px 像素 3.dpi 屏幕密度1920^2+ 1080...

  • 屏幕适配

    参考 android dp api关于Android设备屏幕大小及密度的系统参数类Android中px dpi d...

  • 安卓----第三周

    自定义控件 dp、sp和px的爱与纠缠 是什么? px:像素点 dp:与像素密度密切相关100px 200px s...

  • px、dp、sp转换And屏幕相关信息获取工具类

    1、px、dp、sp相互转换方法 2、屏幕宽高px dp获取方法 3、屏幕密度 dpi获取方法

  • Drawable Bitmap

    当屏幕密度为160时,1dp = 1px(像素)当屏幕密度为320时,1dp = 2px(像素) 以此类推 D...

网友评论

      本文标题:dp px和设备密度

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