如何为Android TV自定义选定的RowPresenter

时间:2016-11-04 16:27:53

标签: android android-tv browsefragment

我希望增加所选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 个答案:

答案 0 :(得分:2)

  
      
  1. 如何比默认缩放尺寸更多地增加所选卡的尺寸?
  2.   

您可以在初始化ListRowPresenter时传入更大的FocusHighlight缩放系数来执行此操作。对于较大的焦点卡,您可以使用FocusHighlight#ZOOM_FACTOR_LARGE初始化演示者。 ListRowPresenterthis constructor

  
      
  1. 如何在选定的卡片周围放置白色边框,以便顺畅地覆盖所有边缘?
  2.   

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