承接上文android:页面Ui适配方案整理这篇文章对当前主流的适配方法进行总结整理:
- 由上文可知适配需要解决的问题:
- 分辨率不同,分辨率密度相同(尺寸不同)
- 分辨率不同,分辨率密度不同(尺寸相不相同都有可能)
- 分辨率相同,分辨率密度不同(尺寸不同)
- 分辨率相同,分辨率密度相同(尺寸相同)
- 当前几乎所有的页面UI适配方案都不能完全解决上面的问题,适配也只能尽可能去适配(原因就不说了,说多了都是泪......)
- 资源适配
-
清单文件配置项目支持的屏幕类型,即:
支持屏幕类型配置 - 系统版本适配:配置支持系统最小版本号和编译版本号且代码中针对版本不一致的api进行版本控制。
- 图标位图适配:图标位图的适配主要包括两种:.9图适配和提供多文件夹适配即Android系统支持提倡的适配方案:
* drawable多文件(hdpi,mdpi,ldpi,xhdpi,xxhdpi等)夹图标适配
* drawable文件夹支持sw600格式即配置宽度最小大于600的使用该图标图片,后面分辨率可配置
* drawable文件夹同样支持w600和h600格式即指定宽度/高度的使用
* 其还提供了其他格式的不再一一列举,具体可以参考下面文章
* 多文件夹放入不同规格的图片一定程度可以解决图标的适配问题,大厂标准分辨率密度符合规范可以,但是还有很大一部分不符合规范的,还有就是大大提升了作图设计人员的工作,所以这一套基本没人用,使用也是对于局部图,常规办法是,根据规范做一套大图切图,压缩比拉伸效果好的原则。 - 布局资源适配
* 布局资源文件夹格式类同上面的图标文件的多文件夹,不再详述,具体可以参考下面文章。
* 布局文件最主要是view的尺寸布局,Android中使用dp代替px,还有就是提出了dimens的概念,针对统一宽高(dimens名字相同)可以在不同的分辨率文件夹下提供不同的大小 - 语言适配
* 语言适配比较麻烦,下面单开文章叙述。 - 布局文件布局优化适配
* 在布局文件中尽可能的不要使用尺寸硬编码,多使用wrapcontent,matchcontent代替
* 根据设计需求合理的使用布局组件,linearlayout和relativelayout合理安排,同样能使用的时候还是建议使用linearlayout,相对线性布局的性能优于相对布局,细节上两者的测绘不一样。
* linearlayout的weight属性可以以百分比的方式布局子view
* align系列属性可以让一个子view相对于另一个子view。
* 在代码中可以通过layoutparams对view宽高边距等进行细致设置及其控制。
- 代码精确适配
- 相对于上面的资源适配不同的是,在代码中可以获取到屏幕的宽高分辨率和具体的分辨率密度,针对这些属性可以做一些更细致的处理。这种多是单个view 的比较细节的处理。
- 鸿翔的百分比像素适配
- 处理对象:这套方案主要处理布局中view的尺寸,不再是以dp的方式处理,而是以百分比的方式,这套方案借助上面资源适配的dimen多文件夹设置。
- 实现原理:不考虑分辨率密度(也正因为如此会有问题),仅从分辨率分析,找到基准分辨率,文章中是以320(我建议160是不是更好一些,官方标准)为基准,分成宽度上的320等分,然后找到市面上的常规机型的分辨率以320为基准将其宽度分辨率同样分为320等分在对应的dimens文件中提供计算好的x1到x320数值,高度类同,在布局中使用x1等代替原有的尺寸,实现爆分比布局
- 优缺点:这套方案相比上面解决了不同分辨率的view的布局问题,上面两种方案说实在不同分辨率的都不能完全解决,但是解决不了相同分辨率不同尺寸,分辨率密度不同的问题
- 百分比重写view适配
- 此方案实现原理和上面的百分比基础原理一致,只是实现方式不一样,当前一个项目中基本就是relative,linear,textview等几个简单view,可以在其基础上重定义mearsure方法,在方法中利用百分比进行重新测绘计算,原理一致问题也就同样存在。
- 使用ConstraintLayout约束布局实现复杂布局的单层级布局;
- ConstraintLayout是当前官方主推的一个布局view容器,其利用多view之间互相约束简化以前比较复杂的布局,同时也提供一系列的适配属性和适配类完善适配,具体参考先前文章:ConstraintLayout使用总结
参考文章:
Android页面Ui适配1
Android系统:百分百布局库
Android提供的支持大小屏幕的不同方法
android屏幕适配方案
Android屏幕参数参考查询
Android屏幕适配全攻略
Android屏幕适配最全解决方案
Android资源适配规范
Android资源适配规范(全面解析)
.9图制作
网友评论