android foo.setVisibility(视图.已完成)和父视图.removeView(foo)之间的差异

oxalkeyp  于 2023-01-07  发布在  Android
关注(0)|答案(3)|浏览(82)

如果foo是一个视图,那么foo.setVisibility(View.GONE)fooParent.removeView(foo)之间有什么区别呢?我特别感兴趣的是视图在这两条语句之前和之后的内存消耗。
可见性设置为GONE的视图是否占用内存?

xwbd5t1u

xwbd5t1u1#

如果您需要删除它们,然后再次显示它们,最好将可见性设置为gone,然后再次更改回可见。
另一方面,如果您不需要它们再次可见,只需将其删除即可。

nimxete2

nimxete22#

    • 假设**

如果你需要删除所有可用的飞行选项,一旦你选择了一个特定的航班。然后去与fooParent.removeView(foo).
或者,
如果您需要选择特定航班,则所有飞行选项将消失,并且再次取消选择飞行选项将显示所有可用选项,然后使用foo.setVisibility(View. GONE)和foo.setVisibility(View. VISIBLE)

setVisibility(View.VISIBLE) = setVisibility(0)
setVisibility(View.GONE) = setVisibility(8)
setVisibility(View.INVISIBLE ) = setVisibility(4)
x8diyxa7

x8diyxa73#

我知道这个问题太老了,但是在我最近的项目中遇到的问题之后,我想给予一个关于View.GONE如何工作的想法,以及它如何在一些运行时视图位置操作中派上用场。
假设你在一个RelativeLayout中添加了两个子视图cv1cv2,并且cv 2相对低于cv1(使用layout_below),那么如果你计划在运行时将cv1的可见性设置为GONE,那么它不会引起任何运行时错误。
这很令人惊讶,因为cv 2是相对于cv1的,现在cv1的可见性是GONE
可见度GONE实际上是这样的,
视图的高度和宽度变为零,但视图仍保留在父视图中,就像一个小点或点。
因此,即使任何视图相对于它放置,它将占据它的位置(这里cv 2将在运行时占据cv1的位置).稍后,如果cv 2的可见性返回到VISIBLE,那么cv1将占据它的实际位置,cv 2在它下面.
这个link描述了我的用例。
当您不想处理在运行时操作视图的LayoutParams的麻烦时,当您的用例如此简单时,这种显示和隐藏视图的方法非常方便。
另一方面,当视图层次结构很复杂,并且您希望在运行时大幅操作视图的边距、填充和相对位置时,可以选择parent.addView()/parent.removeView()方法。

相关问题