摘自 http://www.cnblogs.com/flyme/archive/2011/11/24/2261166.html

摘自http://hi.baidu.com/jlcust/item/52f28908285867db72e6764d

摘自http://blog.csdn.net/boliu123/article/details/7293618

(一)

 

android中UI应用的开发中经常会使用view.setVisibility()来设置控件的可见性,其中该函数有3个可选值,他们有着不同的含义:

View.VISIBLE--->可见
View.INVISIBLE--->不可见,但这个View仍然会占用在xml文件中所分配的布局空间,不重新layout 
View.GONE---->不可见,但这个View在ViewGroup中不保留位置,会重新layout,不再占用空间,那后面的view就会取代他的位置,


所以在使用时要小心,尤其要善用INVISIBLE和GONE;

(二

 前者隐藏View并释放View之前占有的layout空间;

后者仅仅是隐藏,但是不释放空间。

前者如下图的上面一组,释放空间后,下面的图片上移,后者情形如下图的下面一组,隐藏后,空间依旧占用:

(三

 

过去太多的情况下以为把一个view的的可见性设置为Gone,因为这样直接把这个组件拿走,不会像Invisable一样,会留下一个很难看的背景图。的确也一直是这么做的

但是最近实现一个浮动层弹出和消失的效果,下边是个ListView.

但是后来莫名奇妙的发现ListView中的Adapter 的getView方法莫名其妙的反复调用。

因为整个界面逻辑比较多,找了一天才发现是浮动层的原因。

浮动层效果是:的是做完动画显示一定的内容后,调用的Gone隐藏的。

后来经过测试,发现如果有组件通过设置Gone 属性隐藏掉,会导致整个界面重新测量宽高,而导致所有AdapterView的View 重新加载。

设为Invisable之后,问题解决

当数据量过大的时候,我想,这两个看起来没太大区别、普通面试常问道的一个小问题,可能效果会很不同吧。


希望对大家有所帮助