请忽略这篇文章
先看这篇文章: Android 目前稳定高效的UI适配方案
总结下,Android适配最核心的问题有两个:
- 适配的效率,即把设计图转化为App界面的过程是否高效
- 如何保证实现
UI
界面在不同尺寸和分辨率的手机中UI
的一致性。
1. dp 适配
通过 dp
加上自适应布局和 weight
比例布局可以基本解决不同手机上适配的问题,这基本是最原始的 Android
适配方案。这种方式存在两个问题:
- 第一,这只能保证我们写出来的界面适配绝大部分手机,部分手机仍然需要单独适配
- 第二,这种方式无法快速高效的把设计师的设计稿实现到布局代码中,通过dp直接适配,我们只能让UI基本适配不同的手机,但是在设计图和UI代码之间的鸿沟,dp是无法解决的,因为dp不是真实像素。
2. 宽高限定符适配
为了高效的实现UI开发,出现了新的适配方案,我把它称作宽高限定符适配。简单说,就是穷举市面上所有的Android手机的宽高像素值。
但是这个方案有一个致命的缺陷,那就是需要精准命中才能适配,比如 1920x1080
的手机就一定要找到 1920x1080
的限定符,否则就只能用统一的默认的 dimens
文件了。而使用默认的尺寸的话,UI
就很可能变形,简单说,就是容错机制很差。
不过这个方案有一些团队用过,我们可以认为它是一个比较成熟有效的方案了。
3. 今日头条适配方案(更新)
这也是相对比较完美的方案,我先简单说一下这个方案的思路,它是通过修改 density
值,强行把所有不同尺寸分辨率的手机的宽度 dp
值改成一个统一的值,这样就解决了所有的适配问题。
比如,设计稿宽度是 360px
,那么开发这边就会把目标 dp
值设为 360dp
,在不同的设备中,动态修改 density
值,从而保证(手机像素宽度) px/density
这个值始终是 360dp
,这样的话,就能保证 UI
在不同的设备上表现一致了。
这个方案侵入性很低,而且也没有涉及私有 API
,应该也是极不错的方案,我暂时也想不到强行修改 density
是否会有其他影响,既然有今日头条的大厂在用,稳定性应当是有保证的。
但是根据我的观察,这套方案对老项目是不太友好的,因为修改了系统的 density
值之后,整个布局的实际尺寸都会发生改变,如果想要在老项目文件中使用,恐怕整个布局文件中的尺寸都可能要重新按照设计稿修改一遍才行。因此,如果你是在维护或者改造老项目,使用这套方案就要三思了。
4. smallestWidth适配
smallestWidth
适配,或者叫 sw
限定符适配。指的是 Android
会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值),然后根据识别到的结果去资源文件中寻找对应限定符的文件夹下的资源文件。
这种机制和上文提到的宽高限定符适配原理上是一样的,都是系统通过特定的规则来选择对应的文件。