一个好用的Android比例自动适配的库

今天刷github的时候发现一个鸿神写的很牛逼的适配库——AndroidAutoLayout.
刚好公司需要适配不同大小的屏幕,就简单试用了一下,感觉不错.集成简单,支持的控件广泛,使用灵活,虽然已经是15年写的了,但是现在用起来也没有发现什么冲突和崩溃.所以写到博客上推荐给大家.

优势

这个库实现的最方便的功能是:我们拿到UI部门给出的以px为单位标注的设计图后,直接照抄上面的px尺寸就能写出一套适配于所有分辨率的xml layout.不仅免去了对着设计图把px转成dp的麻烦,而且也不用为不同的屏幕编写多套layout.很有一套UI打遍天下的感觉.
而且使用这个库理论上完全可以使用一个FrameLayout,里面的view使用margin定位,不用嵌套就能完成UI,对UI效率也有很大提升.

原理

简单学习了一下源码,这个库的核心思想是,事先按照设计图设定好设计图的宽高(design_width/design_height),然后把设计图上所有控件的px尺寸按原单位px填入xml文件中,最终这个库会根据设计图总体尺寸和控件尺寸,算出控件在设计图上占的宽高比,再根据实际屏幕大小动态放大或缩小控件以保证控件在实际屏幕上占的比例和在设计图上占的比例一致.

这种按比例缩放的方法不仅可以用在控件本身的大小上,也可以同理应用到控件的margin/padding/textSize等跟大小相关的属性上,统一缩放以后,在不同的屏幕上显示的效果就都跟设计图上一致了.

使用

1.首先添加库引用.

1
2
3
dependencies {
compile 'com.zhy:autolayout:1.4.5'
}

2.在项目的AndroidManifest中注明设计稿的尺寸。

1
2
3
4
<meta-data android:name="design_width" android:value="768">
</meta-data>
<meta-data android:name="design_height" android:value="1280">
</meta-data>

3.界面的改动.

  • Activity界面的用法

让Activity继承AutoLayoutActivity

1
2
3
4
5
public class MainActivity extends AutoLayoutActivity {
.......
}
  • Fragment界面的用法

在onCreateView生成返回生成的view之前使用AutoUtils重新计算view的大小(一定要在对view的全部处理完成后再调整大小).

1
2
3
4
5
6
7
8
9
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(.......);
.........
.........
AutoUtils.autoSize(view);
return view;
}
  • 动态生成的view的用法

以上两种都是对xml中写好的静态的layout进行大小适配的用法.如果需要动态生成view,比如生成页码按钮,添加到页码容器中,需要在生成结束后,添加到容器之前调用AutoUtils进行大小调整.

1
2
3
4
5
6
7
8
9
10
11
//动态生成pageBtn,并且动态设置宽高间隔等
TextView pageBtn = new TextView(getApplicationContext());
pageBtn.setPadding(10 , 20 , 30 , 40);
pageBtn.setTextSize(25);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(40 , 40);
layoutParams.setMargins(10 , 20 , 30 , 40);
//在全部生成完毕后,添加至容器之前调整大小.
AutoUtils.autoSize(pageBtn);
pageBtnContainer.addView(pageBtn , layoutParams);

做完之后,记得把dp换成px,大小换成跟设计图上标注的一样的px值.
集成完毕,适配完成,就这么简单~

其他

感谢张鸿阳大神提供这么好用的库.

AndroidAutoLayout的github
鸿神写的AutoLayout的介绍文章
AndroidAutoLayout的项目介绍

以上介绍中还附上了许多进阶用法,学习中…