Android TV:禁用 ImageCardView 上 info_field 的合拢

Android TV: Disable collapsing on info_field on ImageCardView

我是第一次使用 Android 电视,我正在通过修改提供的示例电视应用程序来学习使用 Leanback。

我遇到的问题是,当我在列表中的第一项上按左键时,导航抽屉打开,焦点转到导航抽屉中的 headers。发生这种情况时,ImageCardViews 中的 info_field 视图会在图像后面折叠。

发生了什么:当我打开导航抽屉时,ImageCardView 上的信息字段隐藏了。

我想要发生的事情:当我打开导航抽屉时,信息字段仍然可见。

我确信有办法做到这一点,因为我在一些 Android 电视应用程序中看到过它,例如 Twitch。当导航抽屉打开时,让 info_field 可见的最佳方法是什么?

我认为如果您查看 ,您将了解其中的大部分内容。信息视图因 leanback 调用 "expanding".

而隐藏

尝试在您的 BrowseFragment 中调用 enableMainFragmentScaling(false);,看看是否符合您的要求。如果感觉不是您想要的,请参考我链接到的post。

此外,如果您尝试了我在链接 SO post 中推荐的内容,您还可以在 BaseCardView setInfoVisibility() 上调用 API 并传递它CARD_REGION_VISIBLE_ALWAYS。这只需要调用对您的卡片的引用,不需要覆盖 Presenter 或 Card。

我已经弄清楚怎么做了。在 CardPresenter 中,在 onCreateViewHolder 中,当创建 ImageCardView 时,我已经覆盖了 BaseCardView 方法,setActivated(boolean activated) 总是将 'true' 传递给它的超级。然后调用 setActivated 以便它从一开始就被激活。像这样:

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
ImageCardView cardView = new ImageCardView(parent.getContext()) {
        @Override
        public void setActivated(boolean activated) {
            super.setActivated(true);
        }
        @Override
        public void setSelected(boolean selected) {
            updateCardBackgroundColor(this, selected);
            super.setSelected(selected);
        }
    };

    cardView.setActivated(true);
    cardView.setFocusable(true);
    cardView.setFocusableInTouchMode(true);
    return new ViewHolder(cardView)
}

所以这对我有用。 ImageCardView 永远不会崩溃。