LoginSignup
5
6

More than 5 years have passed since last update.

RecyclerViewのItemDecorationをViewTypeで指定できるライブラリ(RecyclerItemDecoration)を作ってみた。

Posted at

RecyclerItemDecoration

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で指定するライブラリはなかったため作ってみました。↓のようなことができます。

demo-vertical demo-horizontal

このスクショでは様々な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

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6