前言#
入職新公司已經好幾天了,一直在熟悉項目的代碼,當然就會碰到各樣的框架,而很多都是之前自己沒有接觸過的,就把其中用到的一些很棒的框架介紹給大家。這個系列會一直寫下去。
正文#
<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提供的布局方式實在是太方便了,幾乎滿足了我們各式各樣的需求。
如果你也覺得他很棒,就趕緊去下去體驗一下吧。有問題和建議歡迎留言。