运行时调整布局大小时内容闪烁

3
我有一个非常复杂的 ListView 元素。当用户向下滚动(例如到第5个元素)时,我使用 hide() 方法隐藏 ActionBar,以提供更多的 ListView 空间。看起来当我这样做时,Android 框架会调用类似于重绘方法的东西,将 ListView 的内容缩放到更大的空间。而且这种缩放是在运行时发生的,没有任何内置的动画。此外,对于复杂的布局(比如我的),重绘会为视图提供难看的闪烁效果,并且它们会改变自己的位置或大小。看起来这种行为在大多数情况下使得任何动态布局变化都不可用。是否有什么想法来解决这个问题?也许有什么巧妙的方法来为这样的重绘提供动画效果吗?
P.S. 我刚刚尝试了 android:animateLayoutChanges="true",但没有效果。视图显示得更流畅了,但闪烁还在..
3个回答

3
当您去掉操作栏时,您现在有更多可见的绘图空间。这会导致框架调整 Activity 中的所有视图大小。这与将任何视图从 VISIBLE 更改为 GONE(将其更改为 INVISIBLE 不会引起重绘,因为空间仍然保留)时发生的情况相同。
为了避免这种情况-从 ActionBar.show() 文档中可以得知:
“如果 ActionBar 当前未显示,则显示它。如果托管 ActionBar 的窗口没有 FEATURE_ACTION_BAR_OVERLAY 功能,则会调整应用程序内容的大小以适应新的可用空间。”
因此,您需要指定该功能。然后,您可能需要调整视图,以便操作栏不会覆盖您想要显示的任何内容。

谢谢,@Gabe Sechan,看起来是可行的解决方案(但当然仅适用于ActionBar)。 - fraggjkee

0
一个可能符合您要求的解决方案是使用一个自定义的Header视图代替操作栏,将此Header视图添加为列表头部,它将随列表一起滚动,并更有效地利用屏幕空间。

0

请检查这个解决方案,可能对您有所帮助

您还需要在Listview的xml中将缓存颜色提示设置为黑色

android:cacheColorHint="#000000"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接