为啥无法在所有手机上还原原型图

在程序员看来,这其实是一个老生常谈的问题,也就是屏幕适配。但是在设计师或者PM看来,又变成了“往下挪一点”、“放大一点”这种轻而易举而程序员却总是解决不了的问题。于是乎我决定整理一下屏幕适配的知识和经常遇到的一些问题。以期待达到以下两个目的:
1. 能够促进程序员和设计师或者PM更好的交流。因此希望程序员和设计能够理解Android屏幕适配的本质问题。我认为只有当双方都在一个频道交流的时候,设计和程序才能更好的配合,否则,程序员只谈程序,设计师只谈设计,于事无补。
2. 希望广大的设计师能够明白,程序员不是万能的。最起码,我真不会修电脑…

好,那我们就先从概念谈起。

px(像素)

这个概念是程序员和设计都能理解的一个最最基本的概念,一个像素就是屏幕上的一个点,而一个屏幕,就是w*h个像素点排列组合起来的。手机参数里的分辨率,就是手机屏幕的像素个数。比如我们常说的720P和1080P,分别指屏幕有720*1280和1080*1920个像素点。

屏幕尺寸

屏幕对角线的长度,单位是英寸(inch)。这个也都懂,没啥好说的。

dpi(屏幕像素密度)

dpi是“dot per inch”的缩写,意即每英寸有多少个像素点。

dp、dip(密度无关像素)

dp和dip是同一个意思,是“Density Independent Pixels”的缩写。这个概念是Android系统里的一个概念,是屏幕适配一个绕不开的话题,也是这篇文章的重头戏。
这个概念是什么意思呢?所谓密度无关,其中的密度就是指dpi——屏幕像素密度。与密度无关的概念自然就是密度有关,我们举个栗子,说明一下什么叫密度有关。
这里我选择了两台手机,一台是Nexus S,另一台是Nexus 5X,两台手机的配置如下:

手机宽(px)高(px)屏幕密度(inch/dpi)
Nexus S4808004.0/233
Nexus 5X108019205.2/423

安卓将160dpi作为标准,当屏幕密度为160dpi的时候,1dp=1px,所以1dp = 1/160 inch,这个在任何手机上都是一样的,所以dp才会与密度无关。当屏幕密度变大,比如变为320dpi的时候1dp = 2px,1英寸的屏幕上,还是有160dp。根据相似三角形的原理,可以得到下面的结果:

手机宽(dp)高(dp)屏幕尺寸(inch)
Nexus S3295494.0
Nexus 5X4087255.2

而通过程序读取出的手机的尺寸如下图:
Nexus SNexus 5X
有些差异(高度的差异有些大啊,哪里算的不对呢?),但是具体原因目前还不了解,如果有了解的大神,也请不吝赐教。

结论

所以,不同尺寸,不同分辨率的屏幕,他们的dp值也是不一样的。即便所有的布局按照dp来布,能够达到的效果也是视觉上的物理尺寸一致。一张效果图无法适配所有的手机,只能约定好一个在所有手机上看起来效果都不会差的布局规则。真要按照所有机型上都和原型图一致,理论上就是不可行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值