上篇介绍了Android手机分辨率基础知识(DPI,DIP计算)想了很多,也查了很多资料不知道如何区分android设备是phone还是pad,android中没有提供固定的方法,有人说用android版本号判断,可是现在android设备很多都在升级系统,没有固定标准,有人说用分辨路,说800*480以上的一般都是pad使用,可是现在很多高分辨率的手机比如三星galaxy NOTE就采用了1280*800 分辨率,屏幕是5.3寸,但是我们看,一般手机屏幕都比较小(相对pad而言),一般手机尺寸都在6英寸以下,而pad多是6英寸以上,好,下面就根据这个标准来判断:
出发点:Android系统本身是支持多种分辨率的,如图1所示,一般情况下要适配不同尺寸的设备只需要做两件事,1. 根据4种不同的屏幕尺寸提供4套UI布局(layout)。 2. 根据4种不同屏幕像素密度(单位英寸的像素值)提供4套界面元素的图片。
Android屏幕分类
而实际应用合并过程中存在的问题是:同一个应用对应的手机和平板界面设计是完全不一样的,如何根据屏幕的大小来决定提供哪一套界面是一件很头疼的事情。
目的:根据分辨率来区分手机和平板的不合理性在于:
1. 分辨率高但是物理屏幕尺寸小的设备(比如三星5.3寸的galaxy NOTE1280*800 手机)采用平板布局后的可点击界面元素太小,很难点中。
2. 分辨率小但是物理屏幕尺寸大的设备采用手机布局后界面元素过大,显得整体UI粗糙。
所以目前通过屏幕尺寸来区分手机和平板相对合理,主要目的是验证如下调整的可行性
分辨率与屏幕尺寸的换算:首先要了解Android分辨率相关基础概念
术语 | 说明 | 备注 |
Screen size(屏幕尺寸) | 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 | 摩托罗拉milestone手机是3.7英寸 |
Aspect Ratio(宽高比率) | 指的是实际的物理尺寸宽高比率,分为long和nolong | Milestone是16:9,属于long |
Resolution(分辨率) | 和电脑的分辨率概念一样,指手机屏幕纵、横方向像素个数 | Milestone是854*480 |
DPI(dot per inch) | 每英寸像素数,如120dpi,160dpi等,假设QVGA(320*240)分辨率的屏幕物理尺寸是(2英寸*1.5英寸),dpi=160 | 可以反映屏幕的清晰度,用于缩放UI的 |
Density(密度) | 屏幕里像素值浓度,resolution/Screen size可以反映出手机密度, | |
Density-independent pixel (dip) | 指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160) |
手机像素密度(density)实际上是以单位英寸160个像素作为参考标准,主要密度有0.75,1,1.5和2,当密度为2时就表示1英寸有320个像素,Android中通过代码可以获取到屏幕的像素值和密度,根据这些值就可以反向算出屏幕的物理尺寸
Math.sqrt(长*长+宽*宽)/ (密度*160)
实践过程:
由于Android设备中获取的密度density本身是个约等于的数值,比如计算出密度的准确值density=1.575,实际在代码中读到的density=1.5, 需要实现一个简单的计算屏幕尺寸的应用在不同设备上验证物理尺寸准确程度,具体代码如下:
实践结果:几个不同设备(手机和平板)的测试结果如下:
结论:手机上根据分辨率反向算出的屏幕物理尺寸比较准确,平板则误差较大,但是结果基本上是大于6寸,以上根据物理尺寸区分手机和平板的方法目前来看是可行的。