View.VISIBLE、INVISIBLE、GONE的区别(你可能没想过Gone和Invisiable的区别)
摘自 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之后,问题解决
当数据量过大的时候,我想,这两个看起来没太大区别、普通面试常问道的一个小问题,可能效果会很不同吧。
希望对大家有所帮助
更多相关文章
- Android界面之常用的圆角提示框Dialog
- Android(安卓)中隐藏虚拟按键的方法实例代码
- android 10.0 以上隐藏方法无法调用 #Accessing hidden method
- android之在启动运用程序的时候彻底隐藏TitleBar
- Android(安卓)动态显示和隐藏状态栏详解及实例
- android之浮动title
- Android(安卓)打电话 流程
- android 监听软键盘弹起和关闭状态与点击空白区域软键盘隐藏
- Android隐藏标题栏和状态栏