【Design】Android UI 适配和Design UI 问题归纳

目录

1. 问题

2. 概念

3. 分析

3.1 UI 设计与UI 实现

3.2 UI 实现与UI 适配

4. 疑问

5. 参考


1. 问题

最近折腾屏幕适配这块,以前隐隐约约记得,系统大概能够自动适配90%左右的问题,但总会有些边角料是需要自己去单独针对适配的;

由于在设计稿和UI 代码之间的鸿沟,dp是无法解决的,因为dp不是真实像素。而且,设计稿的宽高往往和Android的手机真实宽高差别极大,以我们的设计稿为例,设计稿的宽高是IOS:375px*750px Android:360px*640px,而真实手机可能普遍是1080*1920;

那这个问题怎么办呢 ?

2. 概念

我们常听说一些手机屏幕配置,列举一些屏幕配置三要素

机型 inch 分辨率 ppi
小米 9 6.39 inch 2340 x 1080 px 403

屏幕配置三要素

  • inch
  • 分辨率
  • ppi

设计人员在设计的时候,出的设计稿相关元素有:

设计三要素

  • 分辨率
  • 倍率
  • 基准(分辨率)

计算公式为:

分辨率 = 倍率 x 基准(分辨率)

我觉得既然是设计人员,是需要分开设计Android 和IOS 设计稿的,不然在一些非标准屏上,总是会有误差,而且误差有时候还会到了不能忽视的地步;

设计 分辨率 倍率 基准
Android 1080 x 1920 px 3 360 x 640 px
720 x 1280 px 2 360 x 640 px

那么,到了Android 小伙伴要实现设计稿的环节上,是如何平衡UI 设计UI 实现的细节误差呢 ?

Android UI 实现除了需要设计提供分辨率和倍率信息之外,自己还需要结合具体机型,进行单独适配资源;

Android UI 实现要素

  • 设计,分辨率
  • 设计,倍率
  • 设备,分辨率
  • 设备,density (像素密度无关)
小米 9 机型适配
Design UI 分辨率 倍率 分辨率 density Android UI 备注
Design 1080 x 1920 px 3 1080 x 2340 px 2.75 Android  
720 x 1280 px 2 1080 x 2340 px 2.75  

其实,可理解为设计提供的倍率,就是以基准(分辨率)设计为基础,设计所想要的理论 density(像素密度无关),实际设备提供的分辨率和density 各不一样,甚至同一规格下也不一样,各个设备机器实际的density,我们称之为设备 density(像素密度无关)

即Design UI 所要表达的设计意图:

Design UI 分辨率 倍率 基准 理论 density(像素密度无关)
Design 1080 x 1920 px 3 360 x 640 px 360 x 640 dp
720 x 1280 px 2 360 x 640 px 360 x 640 dp

那么再加一条Android 要素,变为Android 设计四要素

  • 分辨率
  • 倍率
  • 基准(分辨率)
  • 理论 density(像素密度无关)

设计提供的倍率理论 density(像素密度无关)设备提供的density设备 density(像素密度无关)相等时,映射到设备上,效果才是一模一样的,否则都会有误差,这个误差称之为绝对误差,需要系统去处理弥补误差;

设计提供的基准理论 density(像素密度无关)其实是相等的,表明本质上设计人员设计的其实是1px = 1dp 放大版本;

拿360 x 640 dp 的理论 density(像素密度无关) 来说,其实真实比例关系为360/160 x 640/160 = 2.25 x 4 尺寸放大版本

如果规定

设计要以1px = 1dp 为标准蓝本(基准要素),设计相关UI 资源;

从设计的角度来看,描述一个Android 屏幕规则有2个要素:

  • 分辨率
  • 理论 density(像素密度无关)

而实际Android UI 实现所表达的设计意图:

机型 Android UI 分辨率 density 设备 density(像素密度无关)
小米 9 Android 1080 x 2340 px 2.75 392.73 x 850.91 dp
小米 5s Android 1080 x 1920 px 3 360 x 640 dp
红米 4(4X) Android 720x 1280 px 2 360 x 640 dp
HUAWEI P10 Android 1080 x 1920 px 3 360 x 640 dp
HUAWEI P10 Plus Android 1440 x 2560 px 4 360 x 640 dp

由此可知,不同的设备提供的density设备 density(像素密度无关) 都是不尽相同的,给实际适配过程中造成的误差不可避免;

density 表达实际设备上,1 dp = <N>density px

设备 density(像素密度无关) 表达实际设备上,总的w(宽)与h(高)分量dp 值;

3. 分析

有了上述描述的概念,那怎么去分析实际工作中遇到的UI 设计UI 实现的问题呢?

这里面其实还延伸出来一个细节问题,就是UI 实现UI 适配的问题?

3.1 UI 设计与UI 实现

要求设计人员按照如下信息提供:

UI 设计的过程

之间是给一个Zip 包,里面有设计资源和html 标注,这个可以自由切换由用户选择几倍图来展示,取值要四舍五入;

实际情况,由于我们用的蓝狐做标注,蓝狐对设计IOS 和Android 的格式有要求,设计人员只提供IOS 设计稿,Android 人员按照IOS 设计稿的来,同时设计人员又不按照蓝狐的设计要求来,所以Android 做出来的问题比较突出;

Android 小伙伴在实现UI 的过程中,如果公司条件允许,

找个和设计提供的分辨率尺寸和理论 density(像素密度无关)一致的Android 手机吧,这个手机的作用其实是面向UI 编程的手机;

其实,打开手机开发者选项 -> 绘图 -> 最小宽度,即可控制设备 density(像素密度无关)

经验证,修改最小宽度的值为360dp,在小米9 设备上,density 由2.75 变为3.0;即可对比验证UI 设计与UI 实现的误差;

 

UI 实现的过程

我们Android 小伙伴其实在实现UI 的过程中,拿到设计稿标注,切换到Android 标注模式,以理论 density(像素密度无关)的在上分量dp 值为准则的,高上的分量dp 值不做要求;

3.2 UI 实现与UI 适配

如果按照上述UI 设计和UI 实现所描述的过程,大概率上针对标准屏应该没事大问题,那如果针对如下的屏幕呢 ?

UI 小伙伴按要求提供的设计,在小米 9 上还是有些小问题,问题原因是啥呢 ?

由于我的屏幕分辨率是1080 x 2340 px 的,设备 density(像素密度无关) 在宽上分量的dp 值为392.73 dp,和设计提供的屏幕分辨率为1080 x 1920 px,理论 density(像素密度无关) 在宽上分量的dp 值为360 dp,列表如下所示:

机型 设计,分辨率 理论 density(像素密度无关) 设备,分辨率 设备 density(像素密度无关) 备注
小米 9 1080 x 1920 px 360 x 640 dp 1080 x 2340 px 392.73 x 850.91 dp  

因此,分辨率宽的度量值是标准值,高的度量值是非标准,设备 density(像素密度无关)的值和标准设计提供的理论 density(像素密度无关)值不符,导致了误差存在;

// 规定 1 px = 1dp 的前提条件下,Android 设计计算公式
设计,分辨率 = 倍率 x 理论 density(像素密度无关)

这样吧,为了做出数学解释,单拿出来规定如下概念,比较好表达与描述问题的原因:

定义,设计分辨率与倍率的比值,为理论预期 density,公式如下:

// 不带单位
理论预期 density = 设计,分辨率/倍率

// 规定 1 px = 1 dp 且带单位的前提条件下
设计,分辨率 = 倍率 * 理论 density(像素密度无关)

其实,二者公式上看是一样的,只不过是带单位与不带单位的区别,这样比较好描述问题

定义,倍率与理论 density(像素密度无关)的积,为设计预期分辨率,公式如下:

// 不带单位
设计预期分辨率 = 倍率 * 理论预期 density(像素密度无关)

// 规定 1 px = 1 dp 且带单位的前提条件下
设计,分辨率 = 倍率 * 理论 density(像素密度无关)

其实,二者公式上看是一样的,只不过是带单位与不带单位的区别,这样比较好描述问题

同理,会存在设备预期 density设备预期分辨率,不一一概述概念了,拿概念来描述问题解释原因,由上述公式,计算各个概念所表达的具体度量值,列表如下所示:

机型 设计预期分辨率 理论预期 density 设备预期分辨率 设备预期 density 备注
小米 9 1080 x 1920 360 x 640 1080.01 x 2340.00 392.73 x 850.91  

由数据对比,得出:

  1. 设计预期分辨率度量值,和设备预期分辨率度量值四舍五入后,相等;
  2. 设计预期分辨率度量值,和设备预期分辨率度量值四舍五入后,不相等,误差为-420;
  3. 理论预期 density度量值,和设备预期 density度量值四舍五入后,不相等,误差为-32.73;
  4. 理论预期 density度量值,和设备预期 density度量值四舍五入后,不相等,误差为-210.91;

由此,得出:

  1. 设计预期分辨率设备预期分辨率的值域,不相等;
  2. 理论预期 density设备预期 density的值域,不相等

导致了,误差的存在;

具体误差有多大呢 ?

采用控制变量法,定义理论预期 density设备预期 density的比值,为相对误差 density 因子,则小米 9 设备和设计标准的相对误差 density 因子为0.92;

此处XXX 因子不讨论了,不过度使用数学工具探讨误差了,避免为了讨论而讨论;

相对误差计算公式:

相对误差 = | 理论预期 density - 设备预期 density| x density

得出,小米 9 相对误差为 = | 360 - 392.73 | x 2.75 = 90.0075 px

4. 疑问

1. 相对误差;

2. 绝对误差;

3. 误差因子;

...

持续性更新,修改,更正中...

5. 参考

  1. Apple Design
  2. Material Design;
  3. Android Design;
  4. 常见手机屏幕尺寸大全
  5. 【Android】layout-sw<N>dp 问题
发布了66 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/DovSnier/article/details/104404709
今日推荐