RecyclerView
AndroidのサポートライブラリではAPILevel7以降でRecyclerView
をサポートしています。
ListView
では標準で行間の区切り線が描画されていましたが、RecyclerView
では描画されません。
RecyclerView
では区切り線が専用のクラスに切りだされ、開発者がより柔軟に実装することが可能になりましたが、区切り線を表示する場合は自分で実装する必要があります。
シンプルなRecyclerView
の区切り線の実装方法についてはこちらを参考にしてください。
http://wasabeef.jp/recyclerview-itemdecoration/
ViewType
RecyclerView
で様々なレイアウトを実現しようとした時にViewType
を使用すると思います。ViewType
でレイアウトするXMLリソースやBindするモデルが変えることができます。
RecyclerViewのViewTypeだけで区切り線を描画するRecyclerItemDecoration
ViewTypeで位置を指定して区切り線を描画するライブラリを作ってみました。
ライブラリはこちら→RecyclerItemDecoration
何が出来るか
positionを指定して多様な区切りを実現するライブラリは存在していたのですが、ViewType
で指定するライブラリはなかったため作ってみました。↓のようなことができます。
このスクショでは様々なViewTypeが実装されたRecylerViewにそれぞれ異なる区切り線が表示されています。
使い方
ライブラリの使い方は以下のようになります。
RecyclerView.ItemDecoration decoration = ItemDecorations.vertical(this)
.first(R.drawable.shape_decoration_green_h_16)
.type(DemoViewType.LANDSCAPE_ITEM.ordinal(), R.drawable.shape_decoration_gray_h_12_padding)
.type(DemoViewType.LANDSCAPE_TILE.ordinal(), R.drawable.shape_decoration_cornflower_lilac_h_8)
.type(DemoViewType.LANDSCAPE_DESCRIPTION.ordinal(), R.drawable.shape_decoration_red_h_8)
.last(R.drawable.shape_decoration_flush_orange_h_16)
.create();
recyclerView.addItemDecoration(decoration);
区切り線を表示したいViewType
と区切り線のDraweableリソース(もしくはDrawableオブジェクト)を引数に指定するだけです。先頭と最後の区切り線についてはfirst()
, last()
で指定することができます。
Gradle
このライブラリはjCenterに公開しているため、AndroidStudioを使っている場合はbuild.gradle
に以下の様に記述するとライブラリを使用できます。
compile 'com.github.magiepooh:recycler-itemdecoration:1.1.0@aar'
Support
このライブラリでサポートしているLayoutManagerは以下のものになります。
- LinearLayoutManager(Vertical)
- LinearLayoutManager(Horizontal)
- LinearLayoutManager(Horizontal+Reverse)
RecyclerItemDecorationの利点
PositionではなくViewTypeで区切り線を指定すると、1行1行の順番や数が変わっても区切り線の実装部分には何も変更が起ません。
例えば、「4個表示しているものを8個にしてほしい」「表示位置を変えて欲しい」という要望があった場合にPositionで指定しているとその条件を書き換える必要がでてきます。(←サービス運用中の経験談w)
このライブラリではそこは考慮せずに使用することができます。
まとめ
PositionではなくViewTypeで区切り線を表示するRecyclerItemDecorationを作ってみました。
使っていただけたら嬉しいですm(_ _)m