2017-02-16 120 views
1

Android的leanback庫提供了一些標準的方法來自定義RowFragment,行和卡本身,但我不知道如何在框架提供的內容之外添加自定義元素。如何自定義Leanback的ListRows?

我特別想要實現的是將一個FooterItem添加到行中,類似於每個行如何具有HeaderItem。

我想獲得ListRowView/ListRowPresenter中的現有功能,但我不知道如何「正常」做到這一點。

回答

1

Leanback幾乎所有的事情一樣,貓的皮膚不止一種。

我們需要定製ListRow以向標題添加更多填充。我們已經通過覆蓋ListRowPresenteronBindRowViewHolder,抓取View的標題(通過View header = holder.getHeaderViewHolder().view;),實現了這一級別的定製。然後我們用header.getLayoutParams().height = rowItem.getRowHeaderHeight();來改變它的高度。

使用相同的技術,您可以動態地將頁腳視圖添加到holder.view(使用addView)。

另一種方法是遵循RowPresenter建議的文檔。相關的報價是:

當RowPresenter的子類,增加了UI小部件,它應該繼承RowPresenter.ViewHolder和覆蓋createRowViewHolder(ViewGroup中)和initializeRowViewHolder(ViewHolder)。子類必須使用佈局ID「row_content」作爲小部件,該小部件將與父片段中可能存在的任何HeadersFragment的標題對齊。

因此,使用這種新推薦的方法,您將基本上提供自己的xml。我相信你甚至可以繼承ListRowPresenter。要查看代碼的工作方式,請查看ListRowView以查看它是否爲R.layout.lb_list_row膨脹了xml。然後它僅使用R.id.row_content的視圖。

然後,這將是由holder.view提供的實際視圖,然後您可以在其上設置文本並執行任何您想要的操作。

讓我知道你是否需要任何進一步的澄清。

+1

我最終擴展了ListRowPresenter並覆蓋了onBindViewHolder,儘管我不得不添加一個檢查來查看我的額外視圖是否已經添加或沒有(因爲某些原因onCreateView被標記爲final)。 我真的希望我能做到這一點,所以它確實只做了一次,而不是每次都檢查,但我想這很好。 至於自定義標題,你知道是否有辦法通過擴展leanback主題,覆蓋一些值,並將該主題設置爲您的活動來做到這一點? –