A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么要进行Android屏幕适配
由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,于是导致:
  • Android系统碎片化:小米定制的MIUI、魅族定制的flyme、华为定制的EMUI等等
    当然都是基于Google原生系统定制的
  • Android机型屏幕尺寸碎片化:5寸、5.5寸、6寸等等
  • Android屏幕分辨率碎片化:320x480、480x800、720x1280、1080x1920
    据友盟指数显示,统计至2015年12月,支持Android的设备共有27796种

当Android系统、屏幕尺寸、屏幕密度出现碎片化的时候,就很容易出现同一元素在不同手机上显示不同的问题。
试想一下这么一个场景:
为4.3寸屏幕准备的UI设计图,运行在5.0寸的屏幕上,很可能在右侧和下侧存在大量的空白;而5.0寸的UI设计图运行到4.3寸的设备上,很可能显示不下。

为了保证用户获得一致的用户体验效果:
使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果
于是,我们便需要对Android屏幕进行适配。

屏幕适配问题的本质
  • 使得“布局”、“布局组件”、“图片资源”、“用户界面流程”匹配不同的屏幕尺寸
    使得布局、布局组件自适应屏幕尺寸;
    根据屏幕的配置来加载相应的UI布局、用户界面流程
  • 使得“图片资源”匹配不同的屏幕密度

解决方案
  • 问题:如何进行屏幕尺寸匹配?
  • 答:

屏幕尺寸适配解决方案


“布局”匹配

本质1:使得布局元素自适应屏幕尺寸
  • 做法
    使用相对布局(RelativeLayout),禁用绝对布局(AbsoluteLayout)

开发中,我们使用的布局一般有:
  • 线性布局(Linearlayout)
  • 相对布局(RelativeLayout)
  • 帧布局(FrameLayout)
  • 绝对布局(AbsoluteLayout)

由于绝对布局(AbsoluteLayout)适配性极差,所以极少使用。
对于线性布局(Linearlayout)、相对布局(RelativeLayout)和帧布局(FrameLayout)需要根据需求进行选择,但要记住:
  • RelativeLayout
    布局的子控件之间使用相对位置的方式排列,因为RelativeLayout讲究的是相对位置,即使屏幕的大小改变,视图之前的相对位置都不会变化,与屏幕大小无关,灵活性很强
  • LinearLayout
    通过多层嵌套LinearLayout和组合使
    用"wrap_content"和"match_parent"已经可以构建出足够复杂的布局。但是LinearLayout无法准确地控制子视图之间的位置关系,只能简单的一个挨着一个地排列

所以,对于屏幕适配来说,使用相对布局(RelativeLayout)将会是更好的解决方案

本质2:根据屏幕的配置来加载相应的UI布局
应用场景:需要为不同屏幕尺寸的设备设计不同的布局
  • 做法:使用限定符
  • 作用:通过配置限定符使得程序在运行时根据当前设备的配置(屏幕尺寸)自动加载合适的布局资源

  • 限定符类型:

    • 尺寸(size)限定符
    • 最小宽度(Smallest-width)限定符
    • 布局别名
    • 屏幕方向(Orientation)限定符


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马