为锻造领域中一流企业努力
视听中心 企业文化 荣誉资质 锻造工艺 给力锻造有限公司

新闻详情|News

Android布局尺寸思考

  虽然安卓的这个显示适配的方案有点怪,最初也不容易马上理解,不过这个方案确实有其自己的道理,整个思路是清晰的,方案的也是完整的,没有硬伤

  安卓采用的【屏幕密度放缩机制】、与web前端对应的是【屏幕比例放缩机制】

  安卓里边,每一段以dp结尾的数值代表的是一段真实的物理尺寸,对,就是物理尺寸,你甚至可以认为它的单位就是“厘米”!

  除了百分比和物理尺寸,还可以用什么?可以用px,对,用像素点,这个是最原始的,不过这样用会有哪些问题呢?

  使用dp和不同的layout在逻辑上是能适应所有情况的

  布局显示的单位最开始最直接的思路肯定是用px,因为电子屏幕就是由一个个px像素点组成的,所以你定义一个组件的长度的时候自然会使用px

  不过在你使用px之后,你会自然地遇到一个问题:当屏幕变化之后,是否能显示你预想的效果?

  这个问题很棘手,一开始拿到会找不到突破口,因为屏幕千奇百怪,然后实际的使用场景也各不一样,怎么可能有银弹嘛,不过且慢,我们静下心分析

  细细想来,屏幕变化只可能有两个维度:屏幕物理尺寸和屏幕像素多少,而分析几个实际例子可以发现我们其实只关心其中的一个,那就是物理尺寸;另外其实使用场景可以恰当地分离出去,最后筛选出这五种情况

  【1】当屏幕物理尺寸没有变化的时候,无论屏幕像素如何,我们希望的是显示效果也是一样

  因为这是从人眼看物的情况来考虑,人眼看物是根据物理尺寸来的,所以这个基本是个定值

  而当屏幕物理尺寸缩小的时候,就会有个比较复杂的情况了,不过有几个大概规律:

  【2】当缩小地不多的时候,我们基本希望显示内容不变,显示的东西按比例缩小一些

  【3】当缩小地比较多的时候,我们希望显示的内容少一些(其实就是布局发生变化,怎么变化跟具体场景有关)

  【4】当放大地不多的时候,我们基本希望显示内容不变,显示的东西按比例放大一些

  【5】当放大地比较多的时候,我们希望显示的内容多一些(其实就是布局发生变化,怎么变化跟具体场景有关)

  第二条、第四条 是通过几种特殊的尺寸基本及格实现(matchparent、比例布局)

  第三条、第五条 也只能通过上面的特殊尺寸来搞,但是无法实现

  dp+物理尺寸特殊对待机制(就是layou-large文件夹)

  所以总体来说,百分比布局比dp布局有少许优势,优势有限

  然后具体说一下dp布局是怎么实现第一条的

  这个分两块,一块的标注的尺寸,一块是图片

  首先对于标注的尺寸,这个不用你管,你直接标dp,不用再多管,那就会是一个物理尺寸了,不随着像素密度变化而变化

  而这里这个dp和px的转换是有严格的公式计算的,非常精确,就是不太好算:

  PPI =( (长度像素数 + 宽度像素数)) / 屏幕对角线英寸数

  从这里也可以看到所谓的÷3其实只是计算结果正好是3而已,也可以是2.9 3.2什么的

  然后是对于图片,是根据【原图适配的屏幕密度】来把图片分类放在不同文件夹来实现的(注意跟物理尺寸特殊对待机制区分)

  首先一张图做出来给你,是你手动决定把图放到哪个文件夹下的(一共有low--medium--high--xhigh--xxhigh几个文件夹)

  你是根据做这张图的人 的【目标屏幕的屏幕密度】来放的

  根据计算得到的屏幕密度,按照谷歌的标准(每个文件夹对应的标准屏幕密度值 )选择一个文件夹

  然后划分你这个屏幕密度是属于哪个级别【这个标准是什么?】

  如果当前文件夹没有图片,就去前后找(以后为主),找到之后,按照标准比值来缩放(3:4:6:8:12)

  所以随便你怎么放,系统只负责缩放,你也知道怎么放的后果,所以你自己决定怎么放(所以你自己就会有个范围,就是中等分算了)

  这样缩放很明显会有问题,当目标分辨率不是标准分辨率的时候就会不精确

  比如你的目标假如是170,然后你只能放到160的文件夹下,然后如果拿一个170的手机去跑,你会发现图片明显缩小了

  图片放缩有问题,除非可以自定义屏幕密度文件夹

  如果不可以自定义的话,可以用尺寸固定imageview的大小,然后用src的最小边中心放缩

  3.2.UI做的像素图怎么跟手机运行的效果图比较?

  所有对应的目标尺寸的机型的截图是比例对齐的

  如果设定目标尺寸是5.5,那么用5.5的机子跑下来截图B,用4.7的机子跑下来截图C

  如果设定目标尺寸是4.7,那么用4.7的机子跑下来截图D,用5.5的机子跑下来截图E

2020-01-08 08:26:00  [返回]