对于Android电视应用,我正在使用v17 leanback库和Leanback主题。
覆盖默认的imageCardView背景颜色时遇到问题。
<!-- original styles defined in Leanback theme -->
<style name="Widget.Leanback.BaseCardViewStyle" />
<style name="Widget.Leanback.ImageCardViewStyle" parent="Widget.Leanback.BaseCardViewStyle">
<item name="cardType">infoUnder</item>
<item name="infoVisibility">activated</item>
<!-- i want to override this -->
<item name="android:background">@color/lb_basic_card_bg_color</item>
</style>
<!-- In my styles.xml I inherit leanback theme and override imageCardViewStyle -->
<style name="AppTheme" parent="Theme.Leanback">
<item name="imageCardViewStyle">@style/myImageCardViewStyle</item>
</style>
<style name="myImageCardViewStyle">
<item name="cardType">infoUnderWithExtra</item>
<item name="infoVisibility">activated</item>
<item name="extraVisibility">activated</item>
<!-- set new color -->
<item name="android:background">#FADCA7</item>
</style>
问题是背景颜色总是转换为Leanback主题中定义的“ lb_basic_card_bg_color”,我不知道该如何覆盖。
另一件事是,我没有找到用于设置imageCardView额外卡片区域内容的方法。在API中,我仅看到setTitleText和setContentText方法。
最佳答案
如果使用的是Presenter(如Leanback演示中所示),则可以尝试访问与ImageCardView一起使用的ViewHolder,并使用findViewById
查找适当的视图。
尝试这个:
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup) {
mContext = viewGroup.getContext();
final ImageCardView imageCardView = new ImageCardView(mContext);
imageCardView.setFocusable(true);
imageCardView.setFocusableInTouchMode(true);
imageCardView.findViewById(R.id.info_field).setBackgroundColor(mContext.getResources().getColor(YOUR_COLOR));
return new ViewHolder(imageCardView);
}
至于Extra,它是您使用
imageCardView.setBadgeImage(Drawable here);
设置的ImageView