分享

一文看懂多屏幕尺寸与标注、切图的关系

 求知_时光 2019-01-11

今天收到三星工作人员的邮件,说我们的应用不适配他们的新机器,那我就需要新出方案呗,于是就有了下面的文章。


        最近三星的S8和Note8都用了18.5:9的高宽比这一神比例!这不禁让我想到了几年前iphone5问世时候的吐槽。


        作为设计师不得不为这种高端用户考虑设计的适配,4:3的用户就让他们忍忍吧。


        面对安卓这个系统,我们见过各种各样的屏幕比例,看看下面大厂的神比例手机!


        吐槽完毕!表笑,笔者刚做完一套可以适配21:9的屏幕的应用启动方案。21:9。。。。

        言归正传,下文有很多专业的开发知识,不懂的可以留言。

        如果是初学者,觉得读着费劲,直接跳到文末的通用安卓标注方法,收藏本文,以后积累一定经验以后就懂了。


        虽然安卓系统为使你的应用适用于不同的屏幕,会进行缩放和大小调整,但你应针对不同的屏幕尺寸和密度优化应用。 这样可以最大程度优化所有设备上的用户体验,用户会认为你的应用实际上是专为他们的设备而设计,而不是简单地拉伸以适应其设备屏幕。


理论开始

         安卓屏幕有1倍(几乎绝迹),2倍(720p),3倍(1080p),4倍(2560*1440)这几个规格。但并不严格是这些分辨率,例如魅族MX4(1920x1152),感觉接近几倍就几倍,这个手机就是三倍的。还有华为多数机器,都有虚拟按键,底下一个灰色的框,其实他吃了你的一些屏幕哦,也不算是16:9啦,很多图压扁了,你没看出来而已。



        我们可以这样理解倍数(n)的概念:

我们有2块屏幕分别是a、b;

            屏幕a,尺寸是640px*360px(px是像素)

            屏幕b,尺寸是1280px*720px

        系统认为: 

            屏幕a,尺寸是640dp*360dp;

            屏幕b,尺寸也是640dp*360dp!

        那么dp是什么?

            对于a的n来说,1dp=n*1px,n=1,a是1倍的屏幕;

            对于b的n来说,1dp=n*1px,n=2,b是2倍的屏幕;


        对于不同倍数的屏幕,他们的n不同;但是人的眼睛只看色彩和形状,是要色彩不变化,形状的比例不发生改变,其实对于用户来说只有大小的差别,不影响信息的接收和理解。

        我们设计的稿子按照1倍(n=1)的稿子设计,1倍的稿子标注就可以了。在n≠1时,系统有自己放大的能力。


系统怎么放大的?

        想象一个标注,我们标注一张图的宽度100dp*100dp,图片显示区域在屏幕的正中央。

        在1倍屏幕下就显示100px*100px的样子,

        在2倍屏幕下放大2倍,显示200px*200px;以此类推,

所以,100px*100px的图放在4倍的屏幕上看,一定会有很明显马赛克喽。那我们怎么提供这个区域的切图?很简单,就给更大的图呗!


标注方法:我们标注就按照1倍的标注,让系统自己去放大显示。

        这样我们就不用管是几倍的手机了。

提供切图:图片我们给多大?就给3倍的足够啦!。

        其实2倍的图也ok的,2倍放大到3倍并不会有明显的马赛克,同时还节省了用户的流量或者APP安装包的大小。4倍的情况除了考虑做电视类的应用,一般手机上3倍足够了,4倍基本已经人眼识别不出来了,超出了视网膜的分辨能了。        


就这么简单?就这么简单!其实还有很多坑,但是不是普遍的坑,靠经验积累了。


你问三星的问题怎么解决的?

有的组件可以进行自适应的拉伸,组件的高度=m*屏幕高度,我们设计出m的值,保证在多种高度的屏幕下设计稿件看起来都优美就可以了,切图给更长的图呗。。。

另外,记得配图要兼顾历史app版本加载此图的效果!(Pro就体现在这里了。。。


/*以下是给有一定开发基础的同学看的,是一段安卓官方文档节选。


如何支持多种屏幕


Android 支持多种屏幕的基础是它能够管理针对当前屏幕配置 以适当方式渲染应用的布局和位图 可绘制对象。系统可处理大多数工作,通过适当地 缩放布局以适应屏幕尺寸/密度和根据屏幕密度缩放位图可绘制对象 ,在每种屏幕配置中渲染您的应用。但是,为了更适当地处理不同的屏幕配置 ,还应该:

  • 在清单中显式声明您的应用 支持哪些屏幕尺寸

    通过声明您的应用支持哪些屏幕尺寸,可确保只有 其屏幕受支持的设备才能下载您的应用。声明对 不同屏幕尺寸的支持也可影响系统如何在较大 屏幕上绘制您的应用 — 特别是,您的应用是否在屏幕兼容模式中运行。

    要声明应用支持的屏幕尺寸,应在清单文件中包含 <supports-screens> 元素。

  • 为不同屏幕尺寸提供不同的布局

    默认情况下,Android 会调整应用布局的大小以适应当前设备屏幕。大多数 情况下效果很好。但有时 UI 可能看起来不太好,需要针对 不同的屏幕尺寸进行调整。例如,在较大屏幕上,您可能要调整 某些元素的位置和大小,以利用其他屏幕空间,或者在较小屏幕上, 可能需要调整大小以使所有内容纳入屏幕。

    可用于提供尺寸特定资源的配置限定符包括 small、normal、large 和 xlarge。例如,超大屏幕的布局应使用 layout-xlarge/。

    从 Android 3.2(API 级别 13)开始,以上尺寸组已弃用,您 应改为使用 sw<N>dp 配置限定符来定义布局资源 可用的最小宽度。例如,如果多窗格平板电脑布局 需要至少 600dp 的屏幕宽度,应将其放在 layout-sw600dp/ 中。声明适用于 Android 3.2 的平板电脑布局一节将进一步讨论如何使用新技术声明布局资源。

  • 为不同屏幕密度提供不同的位图可绘制对象

    默认情况下,Android 会缩放位图可绘制对象(.png、.jpg 和 .gif 文件)和九宫格可绘制对象(.9.png 文件),使它们以适当的 物理尺寸显示在每部设备上。例如,如果您的应用只为 基线中密度屏幕 (mdpi) 提供位图可绘制对象,则在高密度 屏幕上会增大位图,在低密度屏幕上会缩小位图。这种缩放可能在 位图中造成伪影。为确保位图的最佳显示效果,应针对 不同屏幕密度加入不同分辨率的替代版本。

    可用于密度特定资源的配置限定符(在下面详述) 包括 ldpi(低)、mdpi(中)、 hdpi(高)、xhdpi(超高)、xxhdpi (超超高)和 xxxhdpi(超超超高)。例如,高密度屏幕的位图应使用 drawable-hdpi/。


最佳做法


支持多种屏幕的目标是创建一款在 Android 系统支持的通用屏幕尺寸上都可以 正常运行且显示良好的应用。本文档 前面各节内容介绍了 Android 系统如何使您的 应用适应屏幕配置,以及如何在不同的 屏幕配置上自定义应用的外观。本节提供另外一些提示以及有助于 确保应用针对不同屏幕配置正确缩放的 技巧概览。

下面是有关如何确保应用在 不同屏幕上正常显示的快速检查清单:

  1. 在 XML 布局文件中指定尺寸时使用 wrap_content、match_parent 或 dp 单位 。

  2. 不要在应用代码中使用硬编码的像素值

  3. 不要使用 绝对布局(AbsoluteLayout)(已弃用)

  4. 为不同屏幕密度提供替代位图可绘制对象

下文将提供更详细的信息。

1. 对布局尺寸使用 包裹内容(wrap_content)、跟父元素匹配(match_parent) 或 dp 单位

为 XML 布局文件中的视图定义 android:layout_width 和 android:layout_height 时,使用 'wrap_content'、 'match_parent' 或 dp 单位可确保在当前设备屏幕上为 视图提供适当的尺寸。

例如,layout_width='100dp' 的视图在 中密度屏幕上测出宽度为 100 像素,在高密度屏幕上系统会将其扩展至 150 像素宽, 因此视图在屏幕上占用的物理空间大约相同。

类似地,您应选择 sp(缩放独立的像素)来定义文本 大小。sp 缩放系数取决于用户设置,系统 会像处理 dp 一样缩放大小。

2. 不要在应用代码中使用硬编码的像素值

由于性能的原因和简化代码的需要,Android 系统使用像素作为 表示尺寸或坐标值的标准单位。这意味着, 视图的尺寸在代码中始终以像素表示,但始终基于当前的屏幕密度。 例如,如果 myView.getWidth() 返回 10,则表示视图在 当前屏幕上为 10 像素宽,但在更高密度的屏幕上,返回的值可能是 15。如果 在应用代码中使用像素值来处理预先未针对 当前屏幕密度缩放的位图,您可能需要缩放代码中使用的像素值,以与 未缩放的位图来源匹配。

如果应用在运行时操作位图或处理像素值,请参阅 下面有关其他密度注意事项的一节。

3. 不要使用绝对布局(AbsoluteLayout)

与其他布局小工具不同,绝对布局会强制 使用固定位置放置其子视图,很容易导致 在不同显示屏上显示效果不好的用户界面。因此,绝对布局在 Android 1.5(API 级别 3)上便已弃用。

您应改用相对布局,它会使用相对定位来放置其子视图。例如,您可以指定按钮小部件显示在文本小工具的“右边”。

4. 使用尺寸和密度特定资源

虽然系统会根据当前屏幕 配置扩展布局,但您在不同的屏幕尺寸上可能要调整 UI,以及提供 针对不同密度优化的可绘制对象。这基本上是重申 本文档前面的信息。简单的说就是大屏的提供大图片,小屏的提供小图片,据一个开发朋友说京东就是这样的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多