Android Studio V3.12環(huán)境下TV開發(fā)教程(六)提供卡片視圖

Android Studio V3.12環(huán)境下TV開發(fā)教程

(轉(zhuǎn)自Android官網(wǎng)https://developer.android.com/training/tv/start)

文章源自:光谷佳武 https://blog.csdn.net/jiawuhan/article/details/80619656

提供卡片視圖

在上一課中,您創(chuàng)建了一個目錄瀏覽器,該瀏覽器在瀏覽片段中實施,顯示媒體項目列表。?在本課中,您將為媒體項目創(chuàng)建卡片視圖并將其顯示在瀏覽片段中。

BaseCardView類和子類顯示與媒體項目關(guān)聯(lián)的元數(shù)據(jù)。?ImageCardView使用的ImageCardView類顯示內(nèi)容的圖像以及媒體項目的標(biāo)題。

本課介紹來自Android Leanback示例應(yīng)用程序的代碼,可在GitHub上找到。?使用此示例代碼來啟動您自己的應(yīng)用程序。

圖1.選擇Leanback示例應(yīng)用程序圖像卡視圖。

創(chuàng)建一個卡片演示者

Presenter生成視圖并根據(jù)需要將對象綁定到它們。?在應(yīng)用程序向用戶展示其內(nèi)容的瀏覽片段中,您將為內(nèi)容卡創(chuàng)建一個Presenter并將其傳遞給將內(nèi)容添加到屏幕的適配器。?在以下代碼中,?CardPresenter在LoaderManageronLoadFinished()回調(diào)中創(chuàng)建。

@Overridepublic void onLoadFinished(Loader>> arg0,? ? ? ? ? ? ? ? ? ? ? ? ? ?HashMap> data) {? ? mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());? ? CardPresenter cardPresenter = new CardPresenter();? ? int i = 0;? ? for (Map.Entry> entry : data.entrySet()) {? ? ? ? ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);? ? ? ? List list = entry.getValue();? ? ? ? for (int j = 0; j < list.size(); j++) {? ? ? ? ? ? listRowAdapter.add(list.get(j));? ? ? ? }? ? ? ? HeaderItem header = new HeaderItem(i, entry.getKey(), null);? ? ? ? i++;? ? ? ? mRowsAdapter.add(new ListRow(header, listRowAdapter));? ? }? ? HeaderItem gridHeader = new HeaderItem(i, getString(R.string.more_samples),? ? ? ? ? ? null);? ? GridItemPresenter gridPresenter = new GridItemPresenter();? ? ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(gridPresenter);? ? gridRowAdapter.add(getString(R.string.grid_view));? ? gridRowAdapter.add(getString(R.string.error_fragment));? ? gridRowAdapter.add(getString(R.string.personal_settings));? ? mRowsAdapter.add(new ListRow(gridHeader, gridRowAdapter));? ? setAdapter(mRowsAdapter);? ? updateRecommendations();}

創(chuàng)建一個卡片視圖

在此步驟中,您使用卡片視圖的視圖持有人構(gòu)建卡片演示者,以描述您的媒體內(nèi)容項目。?請注意,每個演示者只能創(chuàng)建一個視圖類型。?如果您有兩種不同的卡片視圖類型,則需要兩個不同的卡片演示者。

Presenter?,實現(xiàn)一個onCreateViewHolder()回調(diào),該回調(diào)創(chuàng)建一個可用于顯示內(nèi)容項的視圖持有者。

@Overridepublic class CardPresenter extends Presenter {? ? private Context mContext;? ? private static int CARD_WIDTH = 313;? ? private static int CARD_HEIGHT = 176;? ? private Drawable mDefaultCardImage;? ? @Override? ? public ViewHolder onCreateViewHolder(ViewGroup parent) {? ? ? ? mContext = parent.getContext();? ? ? ? mDefaultCardImage = mContext.getResources().getDrawable(R.drawable.movie);...

onCreateViewHolder()方法中,為內(nèi)容項目創(chuàng)建一個卡片視圖。?以下示例使用ImageCardView?。

選擇卡時,默認(rèn)行為會將其展開為較大的尺寸。?如果您想為選定的卡指定不同的顏色,請按此處所示調(diào)用setSelected()?。

...? ? ImageCardView cardView = new ImageCardView(mContext) {? ? ? ? @Override? ? ? ? public void setSelected(boolean selected) {? ? ? ? ? ? int selected_background = mContext.getResources().getColor(R.color.detail_background);? ? ? ? ? ? int default_background = mContext.getResources().getColor(R.color.default_background);? ? ? ? ? ? int color = selected ? selected_background : default_background;? ? ? ? ? ? findViewById(R.id.info_field).setBackgroundColor(color);? ? ? ? ? ? super.setSelected(selected);? ? ? ? }? ? };...

當(dāng)用戶打開您的應(yīng)用程序時,?Presenter.ViewHolder會顯示您的內(nèi)容項目的CardView對象。?您需要設(shè)置這些以通過調(diào)用setFocusable(true)setFocusableInTouchMode(true)從D-pad控制器接收焦點(diǎn)。

...? ? cardView.setFocusable(true);? ? cardView.setFocusableInTouchMode(true);? ? return new ViewHolder(cardView);}

當(dāng)用戶選擇ImageCardView?,它會展開以顯示您指定背景顏色的文本區(qū)域,如圖1所示。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容