2017-02-16 17 views
1

Androidのleanbackライブラリには、行とカードの両方のRowFragmentをカスタマイズするための標準的な方法がいくつか用意されていますが、フレームワーク上にカスタム要素を追加する方法はわかりません。LeanbackのListRowsをカスタマイズする方法は?

私が具体的に達成しようとしているのは、各行にどのようにHeaderItemがあるかと同様に、行にFooterItemを追加することです。

私はListRowView/ListRowPresenterの既存の機能を使いたいと思いますが、どうすれば「正しく」行うかはわかりません。

答えて

1

Leanbackのほぼすべてのものと同様に、猫の皮膚を作る方法は複数あります。

ListRowをカスタマイズして、ヘッダーにパディングを追加する必要がありました。 onBindRowViewHolderListRowPresenterに上書きし、ヘッダーにはViewView header = holder.getHeaderViewHolder().view;経由)を取り込み、このレベルのカスタマイズを達成しました。そして、それを高さをheader.getLayoutParams().height = rowItem.getRowHeaderHeight();に変更しました。

この同じ手法では、holder.viewaddView)にフッタービューを動的に追加できます。

もう1つのアプローチは、RowPresenterのドキュメントが推奨する内容に従います。関連の引用は次のとおりです。

RowPresenterのサブクラスはUIウィジェットを追加すると、それはRowPresenter.ViewHolderをサブクラス化しcreateRowViewHolder(のViewGroup)とinitializeRowViewHolder(ViewHolder)をオーバーライドする必要があります。サブクラスは、親フラグメントに存在するHeadersFragmentのタイトルにアライメントされるウィジェットに対してレイアウトID "row_content"を使用する必要があります。

この新しい推奨アプローチでは、基本的に独自のXMLを提供します。 ListRowPresenterをサブクラス化することもできると信じています。コードの動作を確認するにはListRowViewを見てR.layout.lb_list_rowのxmlを膨らませることを確認してください。そしてそれはただR.id.row_contentのためのビューを使用します。

次に、それはholder.viewによって提供された実際のビューになります。次に、テキストを設定して必要な操作を行うことができます。

さらに詳しい説明が必要な場合はお知らせください。

+1

私は余分なビューが既に追加されているかどうかを確認するためにチェックを追加しなければならなかったが、(何らかの理由でonCreateViewが最終としてマークされているため)ListRowPresenterを拡張してonBindViewHolderをオーバーライドした。 私は本当にそれを行うことができたらいいと思っています。確かに一度だけ行い、毎回チェックしませんが、これは問題ありません。 ヘッダーをカスタマイズするには、leanbackテーマを拡張し、いくつかの値をオーバーライドして、そのテーマをあなたのアクティビティに設定することでこれを行う方法があるかどうかを知っていますか? –

関連する問題