如何为 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的主要内容,如果未能解决你的问题,请参考以下文章

如何为反应表 7 提供自定义排序功能?

如何为 AVD 管理器创建自定义 Android 设备配置文件?

如何为 didSelectRowAtIndexPath 中的选定笔尖单元触发某些 segue

android如何为自定义的类传递参数?

如何为自定义视图选择设置膨胀和颜色变化的动画?

如何为android中的所有视图使用相同的自定义字体?