摘自 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之后,问题解决
当数据量过大的时候,我想,这两个看起来没太大区别、普通面试常问道的一个小问题,可能效果会很不同吧。
希望对大家有所帮助