如何为 Android TV 自定义选定的 RowPresenter
Posted
技术标签:
【中文标题】如何为 Android TV 自定义选定的 RowPresenter【英文标题】:How to customize selected RowPresenter for Android TV 【发布时间】:2017-03-18 13:46:46 【问题描述】:我想增加选定RowPresenter
的大小,并在BrowseFragment
周围放置一个白色边框。我尝试跟随放置边框,但它的边缘适合我的卡片,因为我正在为卡片使用圆角。
private final class ItemViewSelectedListener implements OnItemViewSelectedListener
@Override
public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
RowPresenter.ViewHolder rowViewHolder, Row row)
ImageCardView cardView = (ImageCardView) itemViewHolder.view;
GradientDrawable border = new GradientDrawable();
border.setStroke(10, ContextCompat.getColor(getActivity(), R.color.white));
cardView.getMainImageView().setImageDrawable(border);
下面是我如何让我的卡片圆角的代码:
<dimen name="lb_rounded_rect_corner_radius">10dp</dimen>
-
如何将所选卡片的大小增加到超过默认缩放大小?
如何在我选择的卡片周围设置白色边框,使其平滑地覆盖所有边缘?
【问题讨论】:
【参考方案1】:如何将所选卡片的大小增加到超过默认缩放大小?
您可以通过在初始化ListRowPresenter
时传入更大的 FocusHighlight 缩放因子来实现这一点。您可以使用 FocusHighlight#ZOOM_FACTOR_LARGE
初始化您的演示者以获得较大的焦点卡片。 ListRowPresenter
有 this constructor。
如何在所选卡片周围设置白色边框,使其平滑地覆盖所有边缘?
您可以提供自己的BaseCardView
(或ImageCardView
)子类,您可以在其中提供自己的布局。当您拥有自己的布局时,您将没有任何限制因素。如果您查看leanback-showcase 示例应用程序中的this folder,则有很多自定义卡片的示例。
这是一个非常简单的例子
public class YourCardView extends BaseCardView
public YourCardView(Context context)
super(context, null, R.style.TextCardStyle);
LayoutInflater.from(getContext()).inflate(R.layout.your_card_xml, this);
setFocusable(true);
您提供自己的 xml 文件而不是 R.layout.your_card_xml
。在那里你可以添加边框和任何你想要的东西。
【讨论】:
以上是关于如何为 Android TV 自定义选定的 RowPresenter的主要内容,如果未能解决你的问题,请参考以下文章
如何为 AVD 管理器创建自定义 Android 设备配置文件?