android studio3.12,Android Studio V3.12环境下TV开发教程(六)提供卡片视图
Android Studio V3.12環境下TV開發教程
文章源自:光谷佳武 https://blog.csdn.net/jiawuhan/article/details/80619656
在上一課中,您創建了一個目錄瀏覽器,該瀏覽器在瀏覽片段中實施,顯示媒體項目列表。?在本課中,您將為媒體項目創建卡片視圖并將其顯示在瀏覽片段中。
BaseCardView類和子類顯示與媒體項目關聯的元數據。?ImageCardView使用的ImageCardView類顯示內容的圖像以及媒體項目的標題。
本課介紹來自Android Leanback示例應用程序的代碼,可在GitHub上找到。?使用此示例代碼來啟動您自己的應用程序。
Presenter生成視圖并根據需要將對象綁定到它們。?在應用程序向用戶展示其內容的瀏覽片段中,您將為內容卡創建一個Presenter并將其傳遞給將內容添加到屏幕的適配器。?在以下代碼中,?CardPresenter在LoaderManager的onLoadFinished()回調中創建。
@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();}
在此步驟中,您使用卡片視圖的視圖持有人構建卡片演示者,以描述您的媒體內容項目。?請注意,每個演示者只能創建一個視圖類型。?如果您有兩種不同的卡片視圖類型,則需要兩個不同的卡片演示者。
在Presenter?,實現一個onCreateViewHolder()回調,該回調創建一個可用于顯示內容項的視圖持有者。
@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);...
選擇卡時,默認行為會將其展開為較大的尺寸。?如果您想為選定的卡指定不同的顏色,請按此處所示調用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);? ? ? ? }? ? };...
...? ? cardView.setFocusable(true);? ? cardView.setFocusableInTouchMode(true);? ? return new ViewHolder(cardView);}
當用戶選擇ImageCardView?,它會展開以顯示您指定背景顏色的文本區域,如圖1所示。
總結
以上是生活随笔為你收集整理的android studio3.12,Android Studio V3.12环境下TV开发教程(六)提供卡片视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 都说它是年度Android机皇,【上手】
- 下一篇: 荣耀手表2鸿蒙,鸿蒙2.0曝光 计划在明