addView和addViewInLayout有什么区别

时间:2013-05-07 04:17:39

标签: android layout

我见过一些使用addView的小部件,有时候还有addViewInLayout。

他们之间有什么区别? 如果我用另一个替换一个会怎么样?

我应该在布局期间保留一个标志并相应地使用“addViewInLayout”或“addView”吗?

感谢。

BR, 亨利

PS。添加更多标签:removeview,removeviewinlayout

3 个答案:

答案 0 :(得分:15)

addView内拨打onLayout通常是一个坏主意,因为addView会在内部触发requestLayout,最终会调用onLayout。因此,当您处于布局中时,最终会触发布局。

如果您真的需要在addViewInLayout中添加新视图,则

addViewonLayout的“更安全”版本。它基本上不会触发布局传递(不会在内部调用requestLayout)。

有关详细信息,请参阅此视频(由android工程师提供):http://www.youtube.com/watch?v=HbAeTGoKG6k

答案 1 :(得分:4)

addViewInLayout

在布局期间添加视图。如果在onLayout()方法中,您需要添加更多视图(例如列表视图),这非常有用。如果index为负数,则表示将其放在列表的末尾。

<强> addView

将传递的LayoutParams分配给传递的视图,并将视图添加到窗口。

*请注意,addView由ViewManager实现,这是一个允许您向Activity添加和删除子视图的接口,因此您可以在运行时向ViewGroup添加视图(DYNAMICALLY)。另请注意,addViewInLayout是ViewGroup的受保护方法,因此,如果您要创建自定义视图组,则可以使用addViewInLayout()方法调用onLayout()

有关详情,请参阅this

答案 2 :(得分:1)

例如:我们有一个布局(mLayout),你想在这个布局中添加2个视图(view1,view2)。所以有两种方式(相同)

case1:只需使用以下命令

mLayout.addView(view1); //onLayout() will be called first time
mLayout.addView(view2); //onLayout() will be called second time after the first time.

在这种情况下,你不关心onLayout()函数。它是简单的源代码。

案例2:复杂但性能更好

    //do something to <global variable>
    bCheck = true; //check it in fuction onLayout()
    requestLayout(); //use this function to call onLayout() function for only one time
   //in onLayout() function of mLayout, you use addViewInLayout() 
   //addViewInLayout() dont call onLayout() function, so you can add 2 views with only one time to call onLayout()
   //onLayout() is abstract function, so mLayout is a instant of subclass of ViewGroup (ex: RelativeLayout, LinearLayout....)
   @Override
   onLayout(boolean changed, int l, int t, int r, int b)
            if(bCheck == true){
            v.addViewInLayout(view1); //add view1 to mLayout
            v.addViewInLayout(view1); //add view2 to mLayout
              bCheck = false;
            }

        }
    });

我没时间测试它。任何人都可以帮助我说清楚。