Android TV(leanback)中的持久标头片段(禁用动画)
Posted
技术标签:
【中文标题】Android TV(leanback)中的持久标头片段(禁用动画)【英文标题】:Persistent header fragment (disable animation) in Android TV (leanback) 【发布时间】:2019-06-03 17:08:31 【问题描述】:有人知道如何实现标题中的问题吗?目的是避免在单击标题后导致标题栏消失的动画,因为 Leanback 应用程序会放大行项目。
setHeadersState 的 BrowseSupportFragment 没有帮助。也许与在 OnHeaderClickedListener 期间劫持 startHeadersTransitionInternal 有关?如果是这样,知道如何正确实现它吗?
【问题讨论】:
与***.com/questions/51977747/… 相同(未答复) 【参考方案1】:所以这个问题在于转换是由包私有的方法startHeadersTransitionInternal
处理的。因此,在大多数情况下您无法覆盖它。但是,由于它只是 package 私有而不是 private 私有,因此您可以做一些小技巧。
首先,在您的应用中创建一个包名称与BrowseSupportFragment
相同的包。然后在该包中创建一个扩展 BrowseSupportFragment
的类,并在没有实现的情况下覆盖有问题的方法。看起来像这样:
package android.support.v17.leanback.app; // Different for AndroidX
public class HackyBrowseSupportFragment extends BrowseSupportFragment
@Override
void startHeadersTransitionInternal(boolean withHeaders)
// Do nothing. This avoids the transition.
那么,您应该扩展HackyBrowseSupportFragment
,而不是扩展BrowseSupportFragment
。
我发现有一点需要注意的是,后退按钮将不再重新聚焦其中一行的标题,因此您必须手动执行此操作。除此之外,似乎工作得很好。
【讨论】:
我已经尝试了上述解决方案,它停止了 HeaderFragment 的动画,但是从 ListRow 项返回到 HeaderItem 时它没有获得焦点。任何建议如何处理这种情况 @ch3tanz 我在我的解决方案中确实注意到这将是一个问题。我没有深入研究这个问题,但如果你发布一个问题并将其链接到这里,那么我会在有时间的时候看看。 感谢@MichaelCeley,快速回复。这是链接 - ***.com/questions/60963864/…【参考方案2】:根据@MichaelCeley 的响应并基于来自BrowseSupportFragment
的原始startHeadersTransitionInternal
方法,这个保持后台堆栈和侦听器的实现也可以工作。
@Override
void startHeadersTransitionInternal(final boolean withHeaders)
if (getFragmentManager().isDestroyed())
return;
if (!isHeadersDataReady())
return;
new Runnable()
@Override
public void run()
if (mBrowseTransitionListener != null)
mBrowseTransitionListener.onHeadersTransitionStart(withHeaders);
if (mHeadersBackStackEnabled)
if (!withHeaders)
getFragmentManager().beginTransaction()
.addToBackStack(mWithHeadersBackStackName).commit();
else
int index = mBackStackChangedListener.mIndexOfHeadersBackStack;
if (index >= 0)
FragmentManager.BackStackEntry entry = getFragmentManager().getBackStackEntryAt(index);
getFragmentManager().popBackStackImmediate(entry.getId(),
FragmentManager.POP_BACK_STACK_INCLUSIVE);
.run();
【讨论】:
以上是关于Android TV(leanback)中的持久标头片段(禁用动画)的主要内容,如果未能解决你的问题,请参考以下文章
Android TV 开发-->Leanback 中的 BrowseSupportFragment
Android TV Leanback Exoplayer 视频缩放问题
当我从一个菜单移动到另一个菜单并返回时,Leanback android Tv 中的 BrowseSupportFragment 会调用服务器