在什么情况下应该使用INVISIBLE而不是GONE?

时间:2013-03-19 17:16:11

标签: android

对于有时可见但有时不可见的View,取决于用户的操作,(保持相同的活动)优先选择什么?

myView.setVisibility(View.INVISIBLE); // or
myView.setVisibility(View.GONE);

没有其他元素取决于myView的大小或尺寸,因此图形结果是相同的。

由于INVISIBLE没有改变视图的尺寸,我猜它比GONE更可取,因为GONE我们可能不得不测量和重绘其他视图。当myView再次变为可见时,重新测量并重新绘制它们。

3 个答案:

答案 0 :(得分:20)

您正在考虑对测量的影响。哪一个更有效率取决于您更改视图可见性的频率。

例如,如果视图在大多数情况下不可见,那么使其GONE可能会更有效率,因为系统不会在需要时不必要地测量和布置您的隐形视图调整屏幕上的其他视图。

另一方面,如果视图经常在可见和不可见之间发生变化,您可能会从INVISIBLE获得更好的性能,因为您可能会在每次转换时避免额外的度量/布局。

答案 1 :(得分:0)

我想从我这边添加一些经验:

我有一个动画按钮(使用ValueAnimator)。按钮从一侧移动到另一侧。

此按钮将切换列表的内容。

  • 第一种方法:使用一个列表视图并更改适配器=>不光滑; '按钮移动动画'跳转到它的结束位置,因为新适配器的加载从UI线程花费了太多时间。该按钮只有200毫秒才能执行动画,这一次完全由ListView拍摄。
  • 我使用ListView =>添加了第二个ViewSwitcher。同样的问题。
  • 因为ViewSwitcher实际上只是将视图设置为 VISIBLE GONE ,所以我希望在将列表设置为 VISIBLE时重绘大量UI线程时间的成本。所以我现在做的是添加一个FrameLayout,将两个ListView放在那里并将其设置为 INVISIBLE 而不是 GONE 。现在再也看不到口吃了!

希望这有助于某人。

答案 2 :(得分:-2)

我的其他元素不依赖于您的视图的可见性,那么您可以使用它们中的任何一个。它们将用于相同的目的。