滚动 ListView 时推出/拉入 ActionBar

Posted

技术标签:

【中文标题】滚动 ListView 时推出/拉入 ActionBar【英文标题】:Push out/pull in ActionBar when ListView is scrolled 【发布时间】:2014-10-04 18:05:22 【问题描述】:

最新的 Google 报亭应用程序具有 ActionBarViewPager 标签栏,当向下滚动下方的列表时,它会慢慢地从屏幕顶部滑出。 重要的是,它以与列表滚动相同的速度缓和。当列表向上滚动时,ActionBar 会回到屏幕上,再次以相同的速度滚动列表

我不是指 ActionBar hide()show() 方法,而是我想知道如何以相同的速率隐藏和显示 ActionBar,使其下方的列表滚动。

这是如何实现的?事实证明,所有试图找到记录在案的解决方案的尝试均不成功,因此我们将不胜感激。

【问题讨论】:

【参考方案1】:

简答

创建一个作为 ActionBar 替代品的 Fragment 子类。滚动事件后使用 OnScrollListener 更新片段视图的 translationY

长答案

在挖掘了ActionBar源代码之后,似乎没有访问ActionBar容器视图的公共方法。但是有意愿的地方,there's a way。

您可以使用以下方法获取对操作栏视图的引用:

int resId = getResources().getIdentifier("action_bar_container", "id", "android");
View actionBarContainer = findViewById(resId);

免责声明action_bar_container 是一个私人 ID,因此它受制于 Google 的奇思妙想。使用风险自负。

一旦您拥有操作栏的视图,您就可以根据需要对其进行动画处理。

如果你有兴趣,我会一起破解 a semi-functional example。

希望这会有所帮助!

【讨论】:

能提供这样的解决方案真是太好了,非常感谢。正如你所说,我将不得不做出决定是否依赖 action_bar_container 未来不被改变是否值得冒险。谢谢。 我需要做一个puch out/pull in action bar tabs。在导入那个github之后,我在src中看不到任何java文件。你能检查一下并告诉我。

以上是关于滚动 ListView 时推出/拉入 ActionBar的主要内容,如果未能解决你的问题,请参考以下文章

在“ListView”中拖放

recyclerview代替listview和grideview

ListView为啥滚动listView时edittext数据丢失

Android - 在 ListView 中滚动时滚动出/折叠元素

返回 ListView 时保持/保存/恢复滚动位置

向下滚动时 Android 更新 ListView