前言#
入职新公司已经好几天了,一直在熟悉项目的代码,当然就会碰到各样的框架,而很多都是之前自己没有接触过的,就把其中用到的一些很棒的框架介绍给大家。这个系列会一直写下去。
正文#
<h2>twoway-view</h2>
twoway-view的下载地址已经贴出来,大家可以直接去下载,运行一下demo,你会被他的强大之处所惊叹:原来实现个性的网格布局这么easy!
github上和demo介绍的还是很清楚的,用法也很简单,下面我把我所了解的总结一下:
<h3>介绍</h3>
首先,这个框架是主要是为RecyclerView做扩展的,现在官方已经推荐开发者去使用RecyclerView去开发列表和网格布局,这个框架完全可以满足ListView和GridView的使用场景。
如果你还不了解RecyclerView的使用,那么你可以先去看看RecyclerView的使用方法,这对于你了解twoway-view框架非常有帮助。
<h3>四种布局</h3>
<b>ListLayoutManager</b>
列表式布局,可以设置竖向或者是横向(android:orientation)。
设置有两种方法,一种是xml:
<org.lucasr.twowayview.widget.TwoWayView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/TwoWayView"
android:orientation="horizontal"
app:twowayview_layoutManager="ListLayoutManager"/>
还可以通过java代码:
ListLayoutManager有三种构造方法,了解过View的构造函数的朋友是不是觉得第一种和第二种很熟悉? 没错,那是xml中使用的构造函数,所以我们去看第三种就好了,参数看上去一目了然 ,context上下文和滚动的方向。
来看一下运行效果:
<b>GridLayoutManager</b>
网格式布局,可以设置竖向或者是横向(android:orientation)。
网格的行数和列数,可以通过xml设置:
<org.lucasr.twowayview.widget.TwoWayView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/TwoWayView"
app:twowayview_layoutManager="GridLayoutManager"
app:twowayview_numColumns="3"
app:twowayview_numRows="3" />
也可以通过构造函数去设置:
<b>StaggeredGridLayoutManager</b>
瀑布流式布局,可以设置竖向或者是横向(android:orientation)。
还可以设置瀑布流中的item占用的行数。
StaggeredGridLayoutManager继承GridLayoutManager,用法是一样的。
这里就主要看看怎么设置占用的行数:
StaggeredGridLayoutManager.LayoutParams lp =
(StaggeredGridLayoutManager.LayoutParams) itemView.getLayoutParams();
// lp.span 可以设置专用的span数量
lp.span = span;
itemView.setLayoutParams(lp);
在StaggeredGridLayoutManager.LayoutParams对象中有一个span属性可以设置要占用的行数,看一下demo的运行效果:
从图中看到2号占用了两行,就是通过刚才的代码设置的。
<b>SpannableGridLayoutManager</b>
扩展性的网格式布局,可以设置竖向或者是横向(android:orientation)。
SpannableGridLayoutManager继承GridLayoutManager,用法是一样的。
SpannableGridLayoutManager与StaggeredGridLayoutManager的区别在于,SpannableGridLayoutManager的item只能等高。
SpannableGridLayoutManager有点类似于表格,他可以设置合并的行数和列数。
如何来设置合并的行数和列数:
SpannableGridLayoutManager.LayoutParams lp =
(SpannableGridLayoutManager.LayoutParams) itemView.getLayoutParams();
lp.rowSpan = 3;
lp.colSpan = 2;
itemView.setLayoutParams(lp);
也是通过SpannableGridLayoutManager.LayoutParams来设置,并且带有rowSpan和colSpan属性,设置合并的行数和列数,看看demo的效果图:
从图中的效果上看,0的rowSpan =2, colSpan = 2,而3的位置 colSpan = 3, rowSpan = 2。
扩展#
<h3>如何设置间距</h3>
<b>DividerItemDecoration</b>
边框性间距,例如demo中使用的就是DividerItemDecoration
final Drawable divider = getResources().getDrawable(R.drawable.divider);
mRecyclerView.addItemDecoration(new DividerItemDecoration(divider));
<b>SpacingItemDecoration</b>
空白行间距。
可以设置verticalSpacing和horizontalSpacing的值。
mRecyclerView.addItemDecoration(new SpacingItemDecoration(10, 10));
<h3>item点击事件</h3>
RecyclerView是没有提供类似于ListView提供的OnItemClickListener,一般都需要我们自己在adapter中设置OnClickListener来解决这个问题,twoway-view提供了另一种解决办法:
// 获取ItemClickSupport,并绑定指定的RecyclerView
final ItemClickSupport itemClick = ItemClickSupport.addTo(mRecyclerView);
// ItemClickSupport 设置OnItemClickListener
itemClick.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(RecyclerView parent, View child, int position, long id) {
}
});
// ItemClickSupport 设置setOnItemLongClickListener
itemClick.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(RecyclerView parent, View child, int position, long id) {
return true;
}
});
目前ItemClickSupport 只支持点击和长按事件,其他的暂不支持。
总结#
这样twoway-view这个框架的使用方法介绍就结束了,不得的感叹twoway-view提供的布局方式实在是太方便了,几乎满足了我们各式各样的需求。
如果你也觉得他很棒,就赶紧去下去体验一下吧。有问题和建议欢迎留言。