投稿

12月, 2017の投稿を表示しています

[Qiita] RecyclerViewにリストカードを表示するViewを作る

イメージ
※この記事は以前Qiitaに投稿されていた古い記事です はじめに Google Nowには、次のようにリストを表示するカードがあります。 このようなカードを作ろうと思ったときに、ViewGroupにaddViewしたり、ListViewをスクロールさせなくしてカードにしてみたりとやり方はいくつかあると思うのですが、これをもっと簡単に作れたらいいのになぁと思い、カスタムビューを作ってみましたので簡単に紹介したいと思います。 実現したいこと 今回作るカスタムビューで実現したいのは次のとおりです。 リストアイテムのViewを生成・保持 リストアイテムの追加・変更・削除 リストアイテムの表示数を制限 リストアイテムの表示数を制限している場合、削除したら次の項目を表示する カードのヘッダー、フッター Viewの構成 今回作るカスタムビューは、次のような構成にします。 まず、カードを作るのでCardViewで囲み、その上にRelativeLayoutを乗せます。 その上に乗っている上下にあるViewはヘッダーとフッターになる予定のものです。 ヘッダーとフッターはViewにしておくことで後で差し替えられるようにし、デフォルトではTextViewを表示します。 そしてメインとなるリストはLinearLayoutを利用します。 基礎となるViewを作る 先ほどのViewの構成どおりに、まずは基礎となるViewを作っていきます。 class ListCardView : CardView { private val defaultPadding = TypedValue . applyDimension ( TypedValue . COMPLEX_UNIT_DIP , 16f , resources . displayMetrics ) . toInt ( ) private var rootView : RelativeLayout = RelativeLayout ( context ) . apply { layoutParams = ViewGroup . LayoutParams ( ViewGroup . LayoutParams . MATCH_PA