移动应用多屏支持

基础概念

常见尺寸单位

  • mm毫米,长度单位。`
  • in(inch|″) 英寸,长度单位,1in=25.4mm
  • px(pixel) 像素,图像显示的基本单位。

密度单位

  • ppi(pixels per inch), px/in 密度单位,每英寸像素数。
  • dpi(dots per inch) 密度单位,每英寸能印刷的点数。

ppi 与 dpi 基本上等价。不过iOS一般用ppi,Android一般用dpi。

屏幕尺寸与分辨率

  • 对角线长度(diagonal) 屏幕物理尺寸(英寸)。
  • 分辨率(resolution) 屏幕上的像素总数,通常写作width*height

如分辨率1080*1920,表示设备水平方向上有1080个像素,垂直方向有1920个像素。

屏幕方向

手机(handset)与平板(tablet)通常有竖屏横屏两种使用的方向模式。

  • 竖屏(portrait)时宽度小于高度。
  • 横屏(landscape)时宽度大于高度。

一个分辨率1080*1920的设备。
处于竖屏模式时,屏幕宽高为 1080*1920。
处于横屏模式时,屏幕宽高为 1920*1080。

逻辑像素单位(dp/sp/pt)

开发时一般不直接使用物理像素(px)而是使用逻辑像素。

  • dp(dip, density-independent pixel) 密度无关像素,用于定义 Android 布局的位置和尺寸。在160dpi屏上1dp = 1px
  • sp(sip, scale-independent pixel) 缩放无关像素,用于定义文字大小,类似且默认等于 dp,使用此单位可让用户在运行时改变配置调整字体大小。
  • pt(point) 点,iOS 开发中用的逻辑像素单位,与 dp 基本上等价。
  • dp/in, pt/in 逻辑密度,每英寸逻辑像素数。

缩放系数/设备密度

  • 缩放系数(scale) 逻辑像素渲染时的缩放比例因子,通过设备密度换算得到。
  • 设备密度(device density) Android厂商或ROM设置的虚拟屏幕密度,用户也能修改,用于计算缩放系数。

计算公式

var _ppi=function(w,r,d){return w*Math.sqrt(1+Math.pow(r,2))/d;};
var _w=function(r,d,ppi){return ppi*d/Math.sqrt(1+Math.pow(r,2));};
var _d=function(w,r,ppi){return w*Math.sqrt(1+Math.pow(r,2))/ppi;};
var _r=function(w,d,ppi){return Math.sqrt(Math.pow(d*ppi/w,2)-1);};

// wpx=1080, hpx=1920, d=5.5, scale=3
var _ws = function(wpx, hpx, d, scale) {
    var r = hpx / wpx,
        wpt=Math.round(wpx/scale),
        hpt=Math.round(hpx/scale),
        ppi=_ppi(wpx, r, d),
        dppi=Math.round(ppi/scale);
    return ['',Math.round(ppi),dppi,wpx+'x'+hpx,wpt+'x'+hpt,''].join('|');
}
_ws(1080, 1920, 5.5, 3);

设备数据

Android 屏幕密度分级

Android 将物理屏幕密度归纳成六个通用密度:

|屏幕密度|缩放系数|描述|
|---|---|:---|---|
|ldpi/120dpi|0.75|已绝迹,不用考虑
|mdpi/160dpi|1|320x480,市场份额不到1%
|hdpi/240dpi|1.5|480x800,480x854,540x960
3.5″左右各种的古董低端机
|xhdpi/320dpi|2|720x1280 4.7″~5.5″ 当前主流低端机,份额下滑中
|xxhdpi/480dpi|3|1080x1920 当前主流中高端机,一般5″以上
|xxxhdpi/640dpi|4|1440x2560 高端机型
|tvdpi/213dpi|1.33|用于电视设备
|nodpi|n/a|无视所有密度

设计时需要根据需求选择目标屏幕密度,建议使用xxhdpi(scale=3)。

自API19后增加的几个屏幕密度级别,设计时通常不需要考虑这些密度:

屏幕密度 缩放系数 API 代表机型
280dpi 1.75 22 n/a
360dpi 2.25 23 n/a
400dpi 2.5 19 Meizu MX3 5.1″ 1080x1800
Huawei Honor X2 7″ 1200x1920
420dpi 2.625 23 Google Nexus 5X 5.2″ 1080x1920
560dpi 3.5 21 Google Nexus 6P 5.7″ 1440x2560

Android 主流分辨率

取 baidu(2017-02)/qqmta(2017-04)/talkingdata(2017-04) 三家的分辨率统计数据

  • 1080x1812,1080x1776... 合并到 1080x1920
  • 720x1184,720x1196... 合并到 720x1280
  • 480x800... 合并到 480x854
resolution qqmta baidu talkingdata
1440x2560 n/a 2.83% 2.15%
1080x1920 46.77% 37.90% 44.81%
720x1280 25.55% 36.37% 31.67%
540x960 5.02% 6.64% 5.77%
480x854 5.08% 10.59% 9.55%
other 19.6% 5.67% 6.05%

设计通常应该基于逻辑分辨率作图,但仍然需要选一种像素分辨率作为基准
1080x1920 已经是占最大份额,且向上向下适配都能保持质量
所以设计作图以 1080x1920 为基准比较合适

Android 主流逻辑宽度

设备逻辑宽度(dp) = 设备宽度(px) / 缩放系数(scale)

逻辑宽度 份额 代表分辨率与设备
360dp 80+% 1080x1920(主流增长中), 1440x2560(高端)
720x1280(主流下滑中), 540x960(淘汰中)
320dp 10+% 淘汰中(480x854, 480x800)
已绝迹(320x480, 240x320)
384dp < 1% Meizu MX4 Pro 5.5″ 1536x2560 640dpi
Meizu MX4 5.5″ 1152x1920 480dpi
Meizu M1 5.0″ 768x1280 320dpi
400dp < 1% Meizu MX2 4.4″ 800x1280 320dpi
432dp < 1% Meizu MX3 5.1″ 1080x1800 400dpi
411dp < 1% Le X820 5.7″ 1440x2560 560dpi
Google Nexus 5X 5.2″ 1080x1920 420dpi
480dp < 1% Huawei Honor X2 7.0″ 1200x1920 400dpi

360dp 目前占绝对主流(80+%),320dp 算少数派(约10%),基本上适配好这两个就能搞定大部分设备。

由于 Google 又搞出 560dpi,420dpi 等好几种密度,现在分辨率 1440x2560,1080x1920 中产生了 411dp 这种宽度,不知道以后还会有什么。

Android 设备屏幕数据

  • density 列是设备密度,用于计算缩放系数(scale)。
  • ppi 列是设备的物理密度。
  • scale 列表是缩放系数。
  • dp 列是设备逻辑分辨率。
  • ratio 列是屏幕比例。
android phones

参考:https://material.io/devices/

iOS 设备屏幕数据

|device|resolution|diagonal|ppi|scale|pt
|:---|---|---|---|---|---|---
|iPhone 2g/3g/3gs|320x480|3.5|163|@1x|320x480pt
|iPhone 4/4s|640x960|3.5|326|@2x|320x480pt
|iPhone 5/5s/5c/6se|640x1136|4|326|@2x|320x568pt
|iPhone 6/6s/7|750x1134|4.7|326|@2x|375x667pt
|iPhone 6+/6s+/7+|1242x2208|5.5|401|@3x|414x736pt
|iPad Mini|768x1024|7.9|162|@1x|768x1024pt
|iPad Mini Retina|1536x2048|7.9|324|@2x|768x1024pt
|iPad 1/2|768x1024|9.7|132|@1x|768x1024pt
|iPad 3/4/Air|1536x2048|9.7|264|@2x|768x1024pt
|iPad Pro|2048x2732|12.9|264|@2x|1024x1366pt

结合以上数据可知

  • 屏幕密度有 @1x/@2x/@3x 三个级别
  • iPad 只有一种逻辑宽度(768pt)
  • iPhone 有3种逻辑宽度(414pt,375pt,320pt)

关于iPhone 6+/6s+/7+

  • 它的缩放系数不再与物理密度相关,渲染缩放系数是3。
  • 它的物理分辨率是 1080x1920,与渲染分辨率不一致,绘制时最终还是要进行缩放。
  • 它的渲染分辨率是 1242x2208,对应的逻辑分辨率是(414x736pt),实际缩放系数(scale)是1080/414=2.608
  • 它还有个放大模式(1125x2001),对应的逻辑分辨率是(375x667pt),实际缩放系数(scale)是1080/375=2.88

iOS 应用图标尺寸

device or context scale app spotlight settings notification
iPhone 6+/6s+/7+ 3x 60pt 40pt 29pt 20pt
iPhone 6/6s/SE/7 2x 60pt 40pt 29pt 20pt
iPad Pro 2x 83.5pt 40pt 29pt 20pt
iPad, iPad mini 2x 76pt 40pt 29pt 20pt
App Store / 1024px / / /

参考:iOS Human Interface Guidelines - App Icon

iOS 控件尺寸

控件 控件高度 控件内图标尺寸
状态栏(Status bar) 20pt /
标签栏(Tabbar) 49pt 约 25x25pt, 最大 48x32pt
工具栏(Toolbar) 44pt 约 22x22pt
导航栏(Navigation bar) 44pt 约 22x22pt

支持多屏

目标

使得设备上某一元素在不同屏幕密度、分辨率、尺寸、方向上都具备合适的显示与交互效果。

  • 宽度与高度
    普通手机应用,大部分时候只需要竖屏显示,部分需要横屏显示。
    这时只需要处理分辨率不同带来的问题。
    优先适配宽度,少数场景需要要同时适配高度。

  • 布局与交互
    当适配的尺寸跨度很大,比如平板,电视,横竖屏切换。
    这时可能需要提供不同的布局甚至交互逻辑。

基于逻辑像素

由于各种屏幕的物理像素密度都有所不同,因此相同数量的物理像素在不同设备上的实际大小也有所差异,这样使用物理像素定义布局尺寸就会产生问题。

因此应当使用与密度无关的逻辑像素(dp/sp/pt)作为测量单位,这本质上是支持不同的屏幕密度

控件自适应

就是适配屏幕的逻辑分辨率(主要是宽度),使控件在不同的逻辑分辨率上都有适当的显示效果。

方法就是尽量使用相对位置和尺寸,比如内边距(padding)/外边距(margin)/对齐(align)/百分比(percent)/权重(weight)/...

下图中几种常用的自适应方法从上到下依次是:

  • 图片宽度根据容器自适应,高度等比缩放。
  • 图片背景使用自动拉伸位图。
  • 图片宽度固定,高度等比缩放,位置居中。
  • 元素尺寸不变,间距自适应。
  • 中间的元素占满剩余宽度。
  • 文本流式。
适配规则

响应式布局

当逻辑宽度不断变大到某个宽度,这时多出大量空间,原本的布局与交互流程已经不适应了。
这时就以这个宽度为断点提供一套新的布局与交互流程

Google Material Design 以基于逻辑宽度(dp)的断点系统来适配不同尺寸的设备:

断点(dp) 竖屏手机(handset)/平板(tablet)
360dp small handset
400dp medium handset
480dp large handset
600dp small tablet
720dp large tablet
840dp large tablet
960dp n/a

断点系统
https://material.io/guidelines/layout/responsive-ui.html#responsive-ui-breakpoints

适配流程

设定基准

以下为3种常用基准

  • 360x640dp, 1080x1920, scale=3
  • 360x640dp, 720x1280, scale=2
  • 375x667pt, 750x1134, scale=2

根据实际需求选择合适的基准。
目前来说建议使用 360x640dp, 1080x1920, scale=3
1080x1920 为目前份额最大的分辨率,向上放大到4x,向下缩小为2x都不会失去太多细节。

设计适配

常见设计工具

  • Photoshop 传统主流设计工具,辅以 cutterman/markman 等工具配合切图与标注。
  • Illustrator 矢量设计工具。
  • Sketch 矢量设计工具(Mac Only),功能强大,插件丰富(导出,标注,占位图,假数据)。
  • Xd(Experience Design) Adobe 2016年推出与Sketch竞争的产品,简单轻量易上手,生态不足。

矢量图标库

建议

  1. 工具:优先使用矢量工具 Sketch > Xd > Illustrator > Photoshop
  2. 设计:尽量使用相对位置和尺寸
  3. 输出:切图以2x为主,失真过多的就输出3x甚至4x,应当输出一份矢量图标
  4. 标注:使用逻辑度量单位(dp/pt),避免换算出小数。

参考

https://material.io/
https://material.io/devices/
https://developer.apple.com/ios/human-interface-guidelines
https://developer.android.com/training/multiscreen/screensizes.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容