Android如何应对不同分辨率手机匹配问题
我们在编写app时,总是用自己的手机调试我们的app,于是出来的效果就是我们手机好就是好,根本不管运行到人家手机是怎么样的,于是当自己得意洋洋下载到人家手机看效果时就傻眼了,what the fuck,这个又丑又长的的app界面设计简直不忍直视好嘛,请专业点好吗,这里虽然是安卓初步,养成良好的界面设计规范是非常重要的,现在我来普及几个常识。
按像素密度分类的类别有 LDPI、MDPI、HDPI 和 XHDPI。
48 dp 的设计韵律
一般来说,可触摸控件以 48 dp 为基础单位。
为什么是 48 dp?
一般情况下,48 dp 在设备上的物理大小是 9 mm (会有一些变化)。这刚好在触摸控件推荐的大小范围 (7-10 mm) 内,而且这样的大小,用户用手指触摸起来也比较准确、容易。
如果你设计的元素都至少有 48 dp 的高度和宽度,那么可以保证:
- 你设计的元素在任何屏幕上显示时,都不会小于最低推荐值 7 mm。
- 你可以在信息密度和界面元素的可操控性之间得到较好的平衡。
具体可以看下一下博客内容,转载自:http://blog.sina.com.cn/s/blog_6499f8f101014ipq.html
一个优秀的手机软件,不仅要有精巧的功能,流畅的速度,让人赏心悦目的UI也往往是用户选择的重要理由。作为移动产品的PM,也需要了解一些在UI设计中的基本知识。
1. px和pt,一对好伙伴
在视觉设计中,我们经常会见到以下两个单位: px和磅数pt。
Px ,是英文单词pixel的缩写,意为像素。在设计领域中,像素是用来计算数码影像的一种单位。计算机中显示的图像并非连续的线条组成,而是由许多肉眼看不见的小点组成。如果把把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小点所组成,这些小点就是构成影像的最小单位“像素”。由于是最小的独立显示单位,px均为整数,不会出现0.5px的情况。
图一 看这个色彩鲜艳的LED灯(原图大小)
图二 你能想象这才是他的本来面目吗?(放大之后)
Pt,则是point的缩写,一般音译为磅数,也有人直译为点数,请大家自行转换。这是使用在印刷领域的单位,一磅等于1/72英寸。在国际上一般会用pt作为字体的单位。
一般情况下,设计师们采用px来进行标注设计图中的图形,用pt来标注文字。在过去很多年的视觉设计中,px和pt的配合堪称天衣无缝,把PC打扮得花枝招展,堪称史上最佳配合的好伙伴。
2. 那些年,我们一起追过的Android
在突如其来的移动互联网时代,px和pt的配合变得不那么和谐。原因就在于Android携众高矮不一,胖瘦各异的爱妃来到世人面前,给他们化妆就变成横看成岭侧成峰,远近高低各不同了。
由于Google对Android的开放政策,使得所有厂商都可以加入到智能手机的研发中来。于是乎,Android手机一时间百花齐放,出现了各种不同的手机样式。比如:
表一 Android分辨率规格(宽*高):
240*320 320*240 320*480 480*800 480*854 640*960 720*1280,……还有平板
分辨率 |
比率 |
市场对应手机 |
320×480 |
2:3 |
三星S5830 Galaxy Ace、三星 I5700、三星I7500、华为U8500 |
索尼爱立信X8 (E15i) 、华为 C8600、Motorola XT502 |
||
Motorola ME600、Motorola CLIQ、Motorola ME501 |
||
LG P503、LG GT540、LG GW620、LG P500 |
||
HTC G6 Legend、HTC Aria (G9)、酷派 D530、酷派 W711 |
||
夏普 SH8118U、天语 W606 、中兴 R750、首派 A60 |
||
240x320 |
3:4 |
HTC A3366 Wildfire、HTC A3380 、HTC A3360 |
Motorola ME511 、Motorola XT301 、Motoroal XT300 |
||
华为 C8500、三星 I5508、中兴 X850、索尼爱立信 U201、SAMSUNG S5570、 |
||
480x800 |
3:5 |
HTC Desire (G7)、HTC A9191 、HTC 双擎T9199 |
HTC A9191、HTC Desire HD (G10) 、HTC Desire Z |
||
HTC Incredible S (S710e)、 HTC EVO 4G、三星 I9003 |
||
三星 I9010、三星 I9088、三星 I909、三星 I9088、三星I9000 |
||
三星I909 (SPhone)、三星I9020、三星T959、三星W899 |
||
酷派N930、Google Nexus S、、酷派 N930、戴尔Venue |
||
联想W101 乐phone (1.6系统非原生)、中兴 V9E、中兴 V880 |
||
联想W100乐phone(1.6)、联想C101、夏普 SH8128 、 |
||
夏普 SH7218U(新机)、Motorola A1680、华为 U8800 |
||
戴尔Mini5 (Streak) 、Google Nexus One (G5) |
||
600x1024 |
75:128 |
三星 Galaxy P1000 |
480x854 |
|
Motorola XT702、Motorola XT711 |
Motorola ME722 (里程碑2)、Motorola XT800 |
||
Motorola ME811 (Droid X)、Motorola ME525 |
||
Motorola XT800+ 、Motorola XT806Ix |
||
索尼爱立信 X10i |
图三 Android屏幕物理尺寸规格
屏幕物理尺寸3.2、3.5、3.75、4.0、4.3、5.0、7、9.3、10.1
为了更好的描述这种多样化引发的问题,我们需要引入一个新的概念density,也就是密度。它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dots per inch,每英寸像素数)作为单位。比如一台分辨率为240x320,屏幕物理尺寸为1.5英寸x2英寸的手机,他的密度可以用分辨率/尺寸,240/1.5或者320/2,密度为160dpi。对于用户来说,密度越大的屏幕显示效果越精细,因为每英寸显示的像素数量更多。
如果是要使用px和pt给程序贴图,假设生成了一条240px的直线,在240*320的屏幕上刚好可以铺满,而放到480x800的分辨率下才刚刚到一半的位置。
如果要解决这样的问题,那么程序在实现的时候就必须为每个分辨率都写一个配置,否则就会出现图形在低密度的屏幕上显示的更大,而在高密度的屏幕上显示的更小。最麻烦的事情在于,一旦出现新的分辨率,所有程序都没办法直接运行了。这明显不符合手机快速发展的客观规律。
3. 新的搭档,dp和sp
为了解决这个问题,Google为Android引入了一套新的单位dp和sp。
首先登场的是dp,Density Independent Pixel,可以翻译为密度无关像素。和px相比,dp在不同密度的屏幕中实际显示比例将保持一致。根据规定,一个dp相当于160dpi屏幕中的一个px。在320dpi的屏幕中,一个dp<span style="line-height: 21px; font-family: 宋体; word-break: no