Android设备分辨率,密度以及dp

简介: 为解决Android设备碎片化,引入一个概念density,也就是密度.它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dots per inch,每英寸像素数)作为单 位.比如设备分辨率为240x320,屏幕物理尺寸为1.5英寸x2英寸(对角线为2.5)它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度为160dpi。

为解决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

 

相关文章
|
1月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
48 0
|
24天前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
本文介绍了如何在基于Amlogic T972的Android 9.0系统上使用Platform平台驱动框架和设备树(DTS),实现设备与驱动的分离,并通过静态枚举在设备树中描述设备,自动触发驱动程序的加载和设备创建。
12 0
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
|
24天前
|
Android开发 C语言
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,通过自动分配设备号和自动创建设备节点文件的方式,开发字符设备驱动程序的教程。
23 0
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
|
24天前
|
自然语言处理 Shell Linux
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
本文是关于在Amlogic安卓9.0平台上创建字符设备驱动的教程,详细介绍了驱动程序的编写、编译、部署和测试过程,并提供了完整的源码和应用层调用示例。
33 0
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
|
24天前
|
传感器 Android开发 芯片
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第三篇,展示了如何在Android系统中利用现有的i2c bus驱动,通过编写设备树节点和应用层的控制代码,实现对基于i2c bus的Slaver设备(如六轴陀螺仪模块QMI8658C)的控制,而无需编写设备驱动代码。
27 0
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
|
24天前
|
Android开发
不写一行代码(二):实现安卓基于PWM的LED设备驱动
本文介绍了在Android系统中不编写任何代码,通过设备树配置和内核支持的通用PWM LED驱动来实现基于PWM的LED设备驱动,并通过测试命令调整LED亮度级别。
25 0
不写一行代码(二):实现安卓基于PWM的LED设备驱动
|
24天前
|
Linux Android开发 C语言
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
本文通过实践操作,展示了在Android系统中不编写任何代码,利用设备树(DTS)配置和内核支持的通用GPIO LED驱动来控制LED设备,并进一步通过C语言编写NDK测试APP来实现LED的闪烁效果。
32 0
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
|
编解码 Android开发
Android多分辨率适配框架(2)— 原理剖析
探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多...
1372 0
|
6天前
|
Android开发 开发者 Kotlin
探索安卓开发中的新特性
【9月更文挑战第14天】本文将引导你深入理解安卓开发领域的一些最新特性,并为你提供实用的代码示例。无论你是初学者还是经验丰富的开发者,这篇文章都会给你带来新的启示和灵感。让我们一起探索吧!
|
1天前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
18 10