选择时如何使电视项目可展开,例如主页的推荐?

I'm*_*Man 5 android android-tv

在AndroidTV的首页中,当用户选择推荐视频时,该项目会自行展开并显示比其他未选择的项目更多的信息。

截图在这里:

在此处输入图片说明

在我的电视应用程序中,我将VerticalGridFragmentas扩展为GridFragment显示电视节目。并且还扩展了Presenter设置项目布局。但是,当item被选中时,item只会放大,而不会像首页的推荐那样显示更多的信息。

如何在我的电视应用程序的 Presenter 中获得这种效果?

I'm*_*Man 4

也许我找到了解决方案:在 中Presenter,我们将创建一个ViewHolder来显示,也许像这样:

public class GridItemPresenter extends Presenter {
......

public GridItemPresenter(Fragment fragment) {
    this.mainFragment = fragment;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
    // Here is the view we want to show.
    final RichCardView cardView = new RichCardView(parent.getContext());

    // We should change something when the view is focused: show more information.
    cardView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, final boolean isFocused) {
            updateCardBackgroundColor(cardView, isFocused);
            cardView.setSelected(isFocused);
        }
    });
    cardView.setFocusable(true);
    cardView.setFocusableInTouchMode(true);
    ......
    return new ViewHolder(cardView);
}

private static void updateCardBackgroundColor(RichCardView view, boolean selected) {
    ......
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, Object item) {
    RichCardView cardView = (RichCardView) viewHolder.view;
    ......
}

@Override
public void onUnbindViewHolder(ViewHolder viewHolder) {
    RichCardView cardView = (RichCardView) viewHolder.view;
    ......
}
}
Run Code Online (Sandbox Code Playgroud)

ViewHolder是一个保存显示视图的容器,在代码中,视图是RichCardView。以下是一些RichCardView代码:

public class RichCardView extends RelativeLayout {

public RichCardView(Context context) {
    this(context, null);
}

public RichCardView(Context context, AttributeSet attrs) {
    this(context, attrs, android.support.v17.leanback.R.attr.imageCardViewStyle);
}

public RichCardView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    LayoutInflater inflater = LayoutInflater.from(context);
    View v = inflater.inflate(R.layout.lb_rich_card_view, this);

   ......
}

@Override
public void setSelected(boolean selected) {
    super.setSelected(selected);
    if (selected) {
        // when be selected, set some views Visible to show more information.
        mContentView.setVisibility(View.VISIBLE);
        mEpisodeView.setVisibility(View.VISIBLE);
    } else {
        // when not be selected, hide those views.
        mContentView.setVisibility(View.GONE);
        mEpisodeView.setVisibility(View.GONE);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

当选择视图时,我们会显示更多视图以显示更多信息。否则,我们隐藏一些视图来隐藏一些信息。

是的,RichCardView只是扩展RelativeLayout。您也可以扩展任何ViewGroup您想要的。如果你想变得生动活泼,只需在改变视图可见性时添加一些动画即可。