优秀框架介绍(一):twoway-view,解决你想要的各种列表网格的布局

前言

入职新公司已经好几天了,一直在熟悉项目的代码,当然就会碰到各样的框架,而很多都是之前自己没有接触过的,就把其中用到的一些很棒的框架介绍给大家。这个系列会一直写下去。

正文

twoway-view

twoway-view github 下载地址

twoway-view的下载地址已经贴出来,大家可以直接去下载,运行一下demo,你会被他的强大之处所惊叹:原来实现个性的网格布局这么easy!

github上和demo介绍的还是很清楚的,用法也很简单,下面我把我所了解的总结一下:

介绍

首先,这个框架是主要是为RecyclerView做扩展的,现在官方已经推荐开发者去使用RecyclerView去开发列表和网格布局,这个框架完全可以满足ListView和GridView的使用场景。

如果你还不了解RecyclerView的使用,那么你可以先去看看RecyclerView的使用方法,这对于你了解twoway-view框架非常有帮助。

四种布局

ListLayoutManager

列表式布局,可以设置竖向或者是横向(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上下文和滚动的方向。

来看一下运行效果:

这里写图片描述

GridLayoutManager

网格式布局,可以设置竖向或者是横向(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" />

也可以通过构造函数去设置:

这里写图片描述

StaggeredGridLayoutManager

瀑布流式布局,可以设置竖向或者是横向(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号占用了两行,就是通过刚才的代码设置的。

SpannableGridLayoutManager

扩展性的网格式布局,可以设置竖向或者是横向(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。

扩展

如何设置间距

DividerItemDecoration

边框性间距,例如demo中使用的就是DividerItemDecoration

final Drawable divider = getResources().getDrawable(R.drawable.divider);
mRecyclerView.addItemDecoration(new DividerItemDecoration(divider));

SpacingItemDecoration

空白行间距。
可以设置verticalSpacing和horizontalSpacing的值。
mRecyclerView.addItemDecoration(new SpacingItemDecoration(10, 10));

item点击事件

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提供的布局方式实在是太方便了,几乎满足了我们各式各样的需求。

如果你也觉得他很棒,就赶紧去下去体验一下吧。有问题和建议欢迎留言。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值