Как настроить выбранный RowPresenter для 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 ответ

Решение
  1. Как я могу увеличить размер выбранной карты больше, чем размер по умолчанию?

Вы можете сделать это, передав больший коэффициент масштабирования FocusHighlight при инициализации ListRowPresenter, Вы можете инициализировать своего докладчика с помощью FocusHighlight#ZOOM_FACTOR_LARGE для больших сфокусированных карт. ListRowPresenter имеет этот конструктор.

  1. Как я могу поместить белую рамку вокруг выбранной карты, чтобы она плавно покрывала все края?

Вы можете предоставить свой собственный подкласс BaseCardView (или же ImageCardView), где вы предоставляете свой собственный макет. Когда у вас есть собственный макет, у вас не будет никаких ограничивающих факторов. Если вы посмотрите на эту папку в примере приложения leanback-showcase, есть много примеров пользовательских карточек.

Это охватывает очень простой пример

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, Там вы можете добавить границы и все, что вы хотите.

Другие вопросы по тегам