diff options
| author | Scott Rowe <scottrowe@google.com> | 2014-12-03 13:21:53 -0800 |
|---|---|---|
| committer | Scott Rowe <scottrowe@google.com> | 2015-01-29 10:50:25 -0800 |
| commit | da0c5de5faccd7ceca419f0178a2d4a51732e3c7 (patch) | |
| tree | 7a914424eab34462dfc4573abdf0fce9e65bed63 | |
| parent | 497387928d53cca060c3f43b3a9f5c7834564333 (diff) | |
| download | frameworks_base-da0c5de5faccd7ceca419f0178a2d4a51732e3c7.zip frameworks_base-da0c5de5faccd7ceca419f0178a2d4a51732e3c7.tar.gz frameworks_base-da0c5de5faccd7ceca419f0178a2d4a51732e3c7.tar.bz2 | |
docs: Card View for Android TV training
Change-Id: I4797c0b3c4ae7106349095016d778992802ccb96
| -rw-r--r-- | docs/html/images/tv/app-browse.png | bin | 0 -> 226591 bytes | |||
| -rw-r--r-- | docs/html/images/tv/card-view.png | bin | 0 -> 307220 bytes | |||
| -rw-r--r-- | docs/html/training/training_toc.cs | 6 | ||||
| -rw-r--r-- | docs/html/training/tv/playback/card.jd | 156 | ||||
| -rw-r--r-- | docs/html/training/tv/playback/index.jd | 3 |
5 files changed, 164 insertions, 1 deletions
diff --git a/docs/html/images/tv/app-browse.png b/docs/html/images/tv/app-browse.png Binary files differnew file mode 100644 index 0000000..7670713 --- /dev/null +++ b/docs/html/images/tv/app-browse.png diff --git a/docs/html/images/tv/card-view.png b/docs/html/images/tv/card-view.png Binary files differnew file mode 100644 index 0000000..5e907de --- /dev/null +++ b/docs/html/images/tv/card-view.png diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs index f5999a5..c59d8ff 100644 --- a/docs/html/training/training_toc.cs +++ b/docs/html/training/training_toc.cs @@ -951,6 +951,10 @@ include the action bar on devices running Android 2.1 or higher." Creating a Catalog Browser</a> </li> <li> + <a href="<?cs var:toroot ?>training/tv/playback/card.html"> + Providing a Card View</a> + </li> + <li> <a href="<?cs var:toroot ?>training/tv/playback/details.html" ja-lang="詳細ビューをビルドする"> Building a Details View</a> @@ -1883,4 +1887,4 @@ results." buildToggleLists(); changeNavLang(getLangPref()); //--> -</script> +</script>
\ No newline at end of file diff --git a/docs/html/training/tv/playback/card.jd b/docs/html/training/tv/playback/card.jd new file mode 100644 index 0000000..8ac75fd --- /dev/null +++ b/docs/html/training/tv/playback/card.jd @@ -0,0 +1,156 @@ +page.title=Providing a Card View +page.tags="card" + +trainingnavtop=true + +@jd:body + +<div id="tb-wrapper"> +<div id="tb"> + <h2>This lesson teaches you to</h2> + <ol> + <li><a href="#presenter">Create a Card Presenter</a></li> + <li><a href="#card-view">Create a Card View</a></li> + </ol> + <h2>Try it out</h2> + <ul> + <li><a class="external-link" href="https://github.com/googlesamples/androidtv-Leanback">Android + Leanback sample app</a></li> + </ul> +</div> +</div> + +<p>In the previous lesson, you created a catalog browser, implemented in a browse fragment, that +displays a list of media items. In this lesson, you create the card views for your media items and +present them in the browse fragment.</p> + +<p>The {@link android.support.v17.leanback.widget.BaseCardView} class and subclasses display the meta +data associated with a media item. The {@link android.support.v17.leanback.widget.ImageCardView} +class used in this lesson displays an image for the content along with the media item's title.</p> + +<p>This lesson describes code from the <a href="https://github.com/googlesamples/androidtv-Leanback"> +Android Leanback sample app</a>, available on GitHub. Use this sample code to start your own +app.</p> + +<img itemprop="image" src="{@docRoot}images/tv/app-browse.png" alt="App main screen"/> +<p class="img-caption"><b>Figure 1.</b> The <a href="https://github.com/googlesamples/androidtv-Leanback"> +Leanback sample app</a> browse fragment with a card presenter displaying card view objects.</p> + +<h2 id="presenter">Create a Card Presenter</h2> + +<p>A {@link android.support.v17.leanback.widget.Presenter} generates views and binds objects to them +on demand. In the browse fragment where your app presents its content to the user, you create a +{@link android.support.v17.leanback.widget.Presenter} for the content cards and pass it to the adapter +that adds the content to the screen. In the following code, the <code>CardPresenter</code> is created +in the {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished(android.support.v4.content.Loader, java.lang.Object) onLoadFinished()} +callback of the {@link android.support.v4.app.LoaderManager}.</p> + +<pre> +@Override +public void onLoadFinished(Loader<HashMap<String, List<Movie>>> arg0, + HashMap<String, List<Movie>> data) { + + mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); + CardPresenter cardPresenter = new CardPresenter(); + + int i = 0; + + for (Map.Entry<String, List<Movie>> entry : data.entrySet()) { + ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter); + List<Movie> 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(); +} +</pre> + +<h2 id="card-view">Create a Card View</h2> + +<p>In this step, you build the card presenter with a view holder for the card view that describes +your media content items. Note that each presenter must only create one view type. If you have two +different card view types then you need two different card presenters.</p> + +<p>In the {@link android.support.v17.leanback.widget.Presenter}, implement an +{@link android.support.v17.leanback.widget.Presenter#onCreateViewHolder(android.view.ViewGroup) onCreateViewHolder()} +callback that creates a view holder that can be used to display a content item.</p> + +<pre> +@Override +public 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); +... +</pre> + +<p>In the {@link android.support.v17.leanback.widget.Presenter#onCreateViewHolder(android.view.ViewGroup) +onCreateViewHolder()} method, create a card view for content items. The sample below uses an +{@link android.support.v17.leanback.widget.ImageCardView}.</p> + +<p>When a card is selected, the default behavior expands it to a larger size. If you want to designate +a different color for the selected card, call {@link android.support.v17.leanback.widget.BaseCardView#setSelected(boolean) +setSelected()} +as shown here.</p> + +<pre> +... + 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); + } + }; +... +</pre> + +<p>When the user opens your app, the {@link android.support.v17.leanback.widget.Presenter.ViewHolder} +displays the <code>CardView</code> objects for your content items. You need to set these to receive +focus from the D-pad controller by calling {@link android.view.View#setFocusable(boolean) setFocusable(true)} +and {@link android.view.View#setFocusableInTouchMode(boolean) setFocusableInTouchMode(true)}.</p> + +<pre> +... + cardView.setFocusable(true); + cardView.setFocusableInTouchMode(true); + return new ViewHolder(cardView); +} +</pre> + +<p>When the user selects the {@link android.support.v17.leanback.widget.ImageCardView}, it expands +to reveal its text area with the background color you specify, as shown in figure 2.</p> + +<img itemprop="image" src="{@docRoot}images/tv/card-view.png" alt="App card view"/> +<p class="img-caption"><b>Figure 2.</b> The <a href="https://github.com/googlesamples/androidtv-Leanback"> +Leanback sample app</a> image card view when selected.</p> + + diff --git a/docs/html/training/tv/playback/index.jd b/docs/html/training/tv/playback/index.jd index 5427d48..0e9c5ec 100644 --- a/docs/html/training/tv/playback/index.jd +++ b/docs/html/training/tv/playback/index.jd @@ -56,6 +56,9 @@ startpage=true <dd>Learn how to use the Leanback support library to build a browsing interface for media catalogs.</dd> + <dt><b><a href="details.html">Providing a Card View</a></b></dt> + <dd>Learn how to use the Leanback support library to build a card view for content items.</dd> + <dt><b><a href="details.html">Building a Details View</a></b></dt> <dd>Learn how to use the Leanback support library to build a details page for media items.</dd> |
