先讲述一些屏幕适配相关概念,而后介绍下3种主要的适配方案以及优缺点。android
主要介绍一些适配方案,至于布局编码注意的问题,不详细介绍了。api
- 使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬编码的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间。
- weight是线性布局的一个独特的属性,咱们可使用这个属性来按照比例对界面进行分配。
- 使用相对布局,禁用绝对布局。等等...
适配目的是使得某一元素在Android不一样尺寸、不一样分辨率的手机上具有相同的显示效果。布局
设定一个基准的分辨率,也就是设计图对应的分辨率,其余分辨率都根据这个基准分辨率来计算,在不一样的尺寸文件夹内部,根据该尺寸编写对应的dimens文件。ui
基准分辨率 1280x720 对应的dimes文件:编码
- 宽度为720,将任何分辨率的宽度整分为720份,取值为x1-x720
- 高度为1280,将任何分辨率的高度整分为1280份,取值为y1-y1280
那么对于1080*1920的分辨率的dimens文件来讲,宽度以下:.net
- x1=(1080/720)*1=1.5px
- x2=(1080/720)*2=3px
...- x719=(1080/720)*719=1078.5px
- x720=(1080/720)*720=1080px
以下分别为分辨率 1280x720 与 1920x1080 所对应的横向dimens.xml 文件: 插件
smallestWidth适配,或者叫sw限定符适配。指的是Android会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值),而后根据识别到的结果去资源文件中寻找对应限定符的文件夹下的资源文件。 smallestWidth 限定符 和宽高限定符适配原理上是同样的,都是系统经过特定的规则来选择对应的文件。设计
插件ScreenMatch自动生成dimes文件 一种很是好用的Android屏幕适配orm
优势:cdn
- smallestWidth 限定符比屏幕分辨率限定符须要少许 dimens.xml 文件
- smallestWidth 限定符适配采用的单位是 dp 和 sp。屏幕分辨率限定符采用px。
- 屏幕分辨率限定符须要精准命中才能适配,而 smallestWidth 限定符适配寻找 dimens.xml 文件的原理是从大往小找,即便没有彻底匹配也能达到不错的适配效果。
- 侵入性高,在全部地方都须要引用。
- 仍是没有办法覆盖全部的机型分辨率,部分机型可能适配效果仍是不佳。
- 不能以高度为基准进行适配。
- 生成不少文件,增大APP体积1~2M。
今日头条屏幕适配方案的核心原理在于,动态计算density,经过系统api,将density赋值给系统,抛弃掉系统默认计算density的计算公式。 公式:
如何使用 今日头条屏幕适配方案
优势
- 使用成本很是低,操做很是简单
- 侵入性很是低
- 可适配三方库的控件和系统的控件
- 会全局影响APP的控件大小,例如一些第三方库控件,他们设计的时候可能设计图尺寸并非像咱们同样是375dp,这样就会致使控件大小变形等一些问题。 当某个系统控件或三方库控件的设计图尺寸和和咱们项目自身的设计图尺寸差距很是大时,这个问题就越严重。