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

Android 运行时调整布局大小时内容闪烁,android,android-layout,Android,Android Layout,我有一个非常复杂的ListView元素。当用户向下滚动(例如,滚动到第5个元素)时,我会隐藏ActionBar(通过hide()方法),为列表视图提供更多空间。看起来当我这样做时,android框架调用了类似于redraw的方法来将ListView的内容扩展到更大的空间。这种缩放在运行时发生,没有任何内置动画。此外,对于复杂的布局(如我的),重画为视图提供了丑陋的闪烁效果,从而改变了自己的位置或大小。这种行为似乎使任何动态布局更改在大多数情况下都不可用。有人知道如何解决这个问题吗?可能有一些棘手

我有一个非常复杂的
ListView
元素。当用户向下滚动(例如,滚动到第5个元素)时,我会隐藏
ActionBar
(通过
hide()
方法),为
列表视图提供更多空间。看起来当我这样做时,android框架调用了类似于
redraw
的方法来将ListView的内容扩展到更大的空间。这种缩放在运行时发生,没有任何内置动画。此外,对于复杂的布局(如我的),重画为视图提供了丑陋的闪烁效果,从而改变了自己的位置或大小。这种行为似乎使任何动态布局更改在大多数情况下都不可用。有人知道如何解决这个问题吗?可能有一些棘手的方法可以为这种重画提供动画效果吗


另外,我刚刚尝试了android:animateLayoutChanges=“true”
,但没有效果。视图看起来更加平滑,但闪烁仍然存在。

当您摆脱操作栏时,您现在有了更多的可视空间来绘制。这将导致框架调整活动中所有视图的大小。这与将任何视图的可见性从“可见”更改为“消失”时发生的情况相同(将其更改为“不可见”不会导致重新绘制,因为空间仍然保留)

要避免这种情况,请参阅ActionBar.show()上的文档

"

如果操作栏当前未显示,则显示该操作栏。如果承载操作栏的窗口没有功能\u ACTION\u BAR\u覆盖,则将调整应用程序内容的大小以适应新的可用空间。 "


因此,您需要指定该特性。然后,您可能需要调整视图,以便操作栏不会覆盖您希望显示的任何内容

检查此解决方案可能对您有所帮助

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

android:cacheColorHint="#000000"

一个适合您的解决方案是使用一个自定义标题视图而不是操作栏,将此标题视图添加为列表标题,它将与列表一起滚动,并将更有效地使用屏幕空间。

谢谢,@Gabe Sechan,它看起来像是一个可行的解决方案(但当然只能应用于操作栏)。