如何为 Android 电视自定义选定的 RowPresenter

How to customize selected RowPresenter for Android TV

我想增加所选 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. 如何将所选卡片的大小增加到超过默认缩放大小?
  2. 如何在我选择的卡片周围放置白色边框,使其平滑地覆盖所有边缘?
  1. How can I increase size of selected card more than default zooming size?

您可以通过在初始化 ListRowPresenter 时传入更大的 FocusHighlight 缩放系数来实现。对于较大的重点卡片,您可以使用 FocusHighlight#ZOOM_FACTOR_LARGE 初始化演示者。 ListRowPresenterthis constructor.

  1. How can I put white border around my selected card, so that it covers all edges smoothly?

您可以提供自己的 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。在那里你可以添加边框和任何你想要的东西。