VLayout是阿里开源的一个用于辅助RecyclerView的LayoutManager扩展库,通过使用LayoutHelper,可以实现一些负责的页面布局,这在阿里系的一些应用中都有体现。由于之前就针对VLayout做过研究,今天就写一篇文章做个总结吧。
一、vlayout如何使用?
(一)、 导入依赖库
compile ('com.alibaba.android:vlayout:1.2.8@aar') {
transitive = true
}
(二)、初始化LayoutManager
VLayout并没有去改变RecyclerView,而是在其基础上增加了辅助,所以使用步骤和RecyclerView差不多;都是需要绑定一个LayoutManager 和一个Adapter(如果对RecyclerView的用法不熟悉,请参考这篇文章RecyclerView详解)。 从VLayout的源码里可以看出它继承了RecyclerView的LayoutManager 和 Adapter, 自定义了VirtualLayoutManager 和 DelegateAdapter, 而VirtualLayoutManager又引入了LayoutHelper来实现各种布局的逻辑。所以首先是要绑定RecyclerView 和 VirtualLayoutManager.
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
final VirtualLayoutManager layoutManager = new VirtualLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
(三)、设置布局
这里以线性布局(LinearLayoutHelper)为例
//设置线性布局
LinearLayoutHelper linearLayoutHelper = new LinearLayoutHelper();
linearLayoutHelper.setItemCount(10);
linearLayoutHelper.setMarginBottom(100);
(四)、绑定Adapter
//设置Adapter列表
List<DelegateAdapter.Adapter> adapters = new LinkedList<>();
adapters.add(new Adapter(this,linearLayoutHelper,4){
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
...
}
});
//绑定delegateAdapter
DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager);
delegateAdapter.setAdapters(adapters);
recyclerView.setAdapter(delegateAdapter);
另外,Vlayout还提供了recycled pool的功能;
(五)、DelegateAdapter的使用
在开始使用之前,我们先来了解一下DelegateAdapter的作用。
DelegateAdapter是VLayout专门为LayoutHelper定制的Adapter,把装载有各种布局的LayoutHelper的Adapter放进DelegateAdapter里最后在RecyclerView.setAdapter(DelegateAdapter);就可以加载出复杂的布局(它不可以直接进行setLayoutHelpers的绑定,但是在它内