SupportLeanbackDemo: demo of custom theme of ImageCardView
Change-Id: I8ba65d9d6ffbc461460acff99ac1c3125eb87d00
diff --git a/samples/SupportLeanbackDemos/res/values/styles.xml b/samples/SupportLeanbackDemos/res/values/styles.xml
index dd86e7e..2d6a234 100644
--- a/samples/SupportLeanbackDemos/res/values/styles.xml
+++ b/samples/SupportLeanbackDemos/res/values/styles.xml
@@ -29,4 +29,22 @@
<style name="Widget.Example.Leanback.SecondStepGuidanceIconStyle" parent="Widget.Leanback.GuidanceIconStyle">
<item name="android:padding">24dp</item>
</style>
+
+ <style name="MyImageCardViewStyle" parent="Widget.Leanback.ImageCardViewStyle">
+ <item name="lbImageCardViewType">Title|Content|IconOnRight</item>
+ </style>
+
+ <style name="MyImageCardViewTitleStyleText" parent="TextAppearance.Leanback.ImageCardView.Title">
+ <item name="android:textColor">@android:color/holo_blue_bright</item>
+ </style>
+
+ <style name="MyImageCardViewTitleStyle" parent="Widget.Leanback.ImageCardView.TitleStyle">
+ <item name="android:textAppearance">@style/MyImageCardViewTitleStyleText</item>
+ </style>
+
+ <style name="MyImageCardViewTheme" parent="Theme.Leanback">
+ <item name="imageCardViewStyle">@style/MyImageCardViewStyle</item>
+ <item name="imageCardViewTitleStyle">@style/MyImageCardViewTitleStyle</item>
+ </style>
+
</resources>
\ No newline at end of file
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
index 6797dbe..93110a9 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
@@ -37,15 +37,14 @@
private static final boolean TEST_ENTRANCE_TRANSITION = true;
private static final int NUM_ROWS = 10;
- // Row heights default to wrap content
- private static final boolean USE_FIXED_ROW_HEIGHT = false;
private ArrayObjectAdapter mRowsAdapter;
private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
// For good performance, it's important to use a single instance of
// a card presenter for all rows using that presenter.
- final static CardPresenter sCardPresenter = new CardPresenter();
+ final CardPresenter mCardPresenter = new CardPresenter();
+ final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -99,11 +98,6 @@
private void setupRows() {
ListRowPresenter lrp = new ListRowPresenter();
- if (USE_FIXED_ROW_HEIGHT) {
- lrp.setRowHeight(CardPresenter.getRowHeight(getActivity()));
- lrp.setExpandedRowHeight(CardPresenter.getExpandedRowHeight(getActivity()));
- }
-
mRowsAdapter = new ArrayObjectAdapter(lrp);
setAdapter(mRowsAdapter);
@@ -111,7 +105,8 @@
private void loadData() {
for (int i = 0; i < NUM_ROWS; ++i) {
- ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(sCardPresenter);
+ ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
+ mCardPresenter : mCardPresenter2);
listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
listRowAdapter.add(new PhotoItem("This is a test", "Only a test", R.drawable.gallery_photo_2));
listRowAdapter.add(new PhotoItem("Android TV", "by Google", R.drawable.gallery_photo_3));
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java
index 29851b3..50a07a3 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java
@@ -39,15 +39,14 @@
private static final boolean TEST_ENTRANCE_TRANSITION = true;
private static final int NUM_ROWS = 10;
- // Row heights default to wrap content
- private static final boolean USE_FIXED_ROW_HEIGHT = false;
private ArrayObjectAdapter mRowsAdapter;
private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
// For good performance, it's important to use a single instance of
// a card presenter for all rows using that presenter.
- final static CardPresenter sCardPresenter = new CardPresenter();
+ final CardPresenter mCardPresenter = new CardPresenter();
+ final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -101,11 +100,6 @@
private void setupRows() {
ListRowPresenter lrp = new ListRowPresenter();
- if (USE_FIXED_ROW_HEIGHT) {
- lrp.setRowHeight(CardPresenter.getRowHeight(getActivity()));
- lrp.setExpandedRowHeight(CardPresenter.getExpandedRowHeight(getActivity()));
- }
-
mRowsAdapter = new ArrayObjectAdapter(lrp);
setAdapter(mRowsAdapter);
@@ -113,7 +107,8 @@
private void loadData() {
for (int i = 0; i < NUM_ROWS; ++i) {
- ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(sCardPresenter);
+ ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
+ mCardPresenter : mCardPresenter2);
listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
listRowAdapter.add(new PhotoItem("This is a test", "Only a test", R.drawable.gallery_photo_2));
listRowAdapter.add(new PhotoItem("Android TV", "by Google", R.drawable.gallery_photo_3));
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/CardPresenter.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/CardPresenter.java
index f5e486b..924975d 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/CardPresenter.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/CardPresenter.java
@@ -15,11 +15,13 @@
import android.content.Context;
import android.graphics.drawable.Drawable;
+import com.example.android.leanback.R;
import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.Presenter;
import android.text.TextUtils;
import android.util.Log;
import android.view.ViewGroup;
+import android.view.ContextThemeWrapper;
import android.view.View.MeasureSpec;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
@@ -32,38 +34,56 @@
private static final int IMAGE_HEIGHT_DP = 120;
private static Random sRand = new Random();
- private static int sRowHeight = 0;
- private static int sExpandedRowHeight = 0;
+ private int mRowHeight = 0;
+ private int mExpandedRowHeight = 0;
- private static void setupRowHeights(Context context) {
- if (sRowHeight == 0) {
+ private int mCardThemeResId;
+ private Context mContextThemeWrapper;
+
+ public CardPresenter(int cardThemeResId) {
+ mCardThemeResId = cardThemeResId;
+ }
+
+ public CardPresenter() {
+ mCardThemeResId = 0;
+ }
+
+ private void setupRowHeights(Context context) {
+ if (mRowHeight == 0) {
float density = context.getResources().getDisplayMetrics().density;
int height = (int) (IMAGE_HEIGHT_DP * density + 0.5f);
ImageCardView v = new ImageCardView(context);
v.setMainImageDimensions(LayoutParams.WRAP_CONTENT, height);
v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
- sRowHeight = v.getMeasuredHeight();
+ mRowHeight = v.getMeasuredHeight();
v.setActivated(true);
v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
- sExpandedRowHeight = v.getMeasuredHeight();
+ mExpandedRowHeight = v.getMeasuredHeight();
}
}
- public static int getRowHeight(Context context) {
+ public int getRowHeight(Context context) {
setupRowHeights(context);
- return sRowHeight;
+ return mRowHeight;
}
- public static int getExpandedRowHeight(Context context) {
+ public int getExpandedRowHeight(Context context) {
setupRowHeights(context);
- return sExpandedRowHeight;
+ return mExpandedRowHeight;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
Log.d(TAG, "onCreateViewHolder");
- ImageCardView v = new ImageCardView(parent.getContext());
+ Context context = parent.getContext();
+ if (mCardThemeResId != 0) {
+ if (mContextThemeWrapper == null) {
+ mContextThemeWrapper = new ContextThemeWrapper(context, mCardThemeResId);
+ }
+ context = mContextThemeWrapper;
+ }
+ ImageCardView v = new ImageCardView(context);
v.setFocusable(true);
v.setFocusableInTouchMode(true);
// Randomly makes image view crop as a square or just stretch to original
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsFragment.java
index 29b5e30..8e9456f 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsFragment.java
@@ -73,17 +73,17 @@
private void setupRows() {
ListRowPresenter lrp = new ListRowPresenter();
- if (USE_FIXED_ROW_HEIGHT) {
- lrp.setRowHeight(CardPresenter.getRowHeight(getActivity()));
- lrp.setExpandedRowHeight(CardPresenter.getExpandedRowHeight(getActivity()));
- }
-
- mRowsAdapter = new ArrayObjectAdapter(lrp);
-
// For good performance, it's important to use a single instance of
// a card presenter for all rows using that presenter.
final CardPresenter cardPresenter = new CardPresenter();
+ if (USE_FIXED_ROW_HEIGHT) {
+ lrp.setRowHeight(cardPresenter.getRowHeight(getActivity()));
+ lrp.setExpandedRowHeight(cardPresenter.getExpandedRowHeight(getActivity()));
+ }
+
+ mRowsAdapter = new ArrayObjectAdapter(lrp);
+
for (int i = 0; i < NUM_ROWS; ++i) {
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportFragment.java
index e0a1403..1eba32ff 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportFragment.java
@@ -75,17 +75,17 @@
private void setupRows() {
ListRowPresenter lrp = new ListRowPresenter();
- if (USE_FIXED_ROW_HEIGHT) {
- lrp.setRowHeight(CardPresenter.getRowHeight(getActivity()));
- lrp.setExpandedRowHeight(CardPresenter.getExpandedRowHeight(getActivity()));
- }
-
- mRowsAdapter = new ArrayObjectAdapter(lrp);
-
// For good performance, it's important to use a single instance of
// a card presenter for all rows using that presenter.
final CardPresenter cardPresenter = new CardPresenter();
+ if (USE_FIXED_ROW_HEIGHT) {
+ lrp.setRowHeight(cardPresenter.getRowHeight(getActivity()));
+ lrp.setExpandedRowHeight(cardPresenter.getExpandedRowHeight(getActivity()));
+ }
+
+ mRowsAdapter = new ArrayObjectAdapter(lrp);
+
for (int i = 0; i < NUM_ROWS; ++i) {
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));