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

时间:2013-04-29 20:44:44

标签: android android-layout

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

P.S。我刚试过android:animateLayoutChanges="true",但没有效果。视图看起来更顺畅,但仍然眨眼......

3 个答案:

答案 0 :(得分:3)

当您摆脱操作栏时,您现在有更多可见空间可供绘制。这会导致框架调整Activity中的所有视图的大小。当您将任何视图的可见性从VISIBLE更改为GONE时,会发生同样的情况(将其更改为INVISIBLE不会导致重绘,因为空间仍然保留)。

要避免这种情况 - 请参阅ActionBar.show()

上的文档

如果当前未显示ActionBar,请显示。如果托管ActionBar的窗口没有FEATURE_ACTION_BAR_OVERLAY功能,它将调整应用程序内容的大小以适应新的可用空间。 “

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

答案 1 :(得分:0)

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

您还需要在Listview

的xml中将缓存颜色提示设置为黑色
android:cacheColorHint="#000000"

答案 2 :(得分:0)

可能符合您要求的一个解决方案是使用一个自定义标题视图而不是操作栏,将此标题视图添加为列表标题,它将滚动列表和放大器。将更有效地使用屏幕空间。