I'm*_*Man 5 android android-tv
在AndroidTV的首页中,当用户选择推荐视频时,该项目会自行展开并显示比其他未选择的项目更多的信息。
截图在这里:

在我的电视应用程序中,我将VerticalGridFragmentas扩展为GridFragment显示电视节目。并且还扩展了Presenter设置项目布局。但是,当item被选中时,item只会放大,而不会像首页的推荐那样显示更多的信息。
如何在我的电视应用程序的 Presenter 中获得这种效果?
也许我找到了解决方案:在 中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您想要的。如果你想变得生动活泼,只需在改变视图可见性时添加一些动画即可。