我见过一些使用 addView 的小部件,有时使用 addViewInLayout。
它们之间有什么区别?如果我用另一个替换一个会发生什么?
我应该在布局期间保留一个标志并相应地使用“addViewInLayout”或“addView”吗?
谢谢。
BR,亨利
附言。添加更多标签:removeview、removeviewinlayout
addView
在内部调用通常是个坏主意,onLayout
因为addView
内部会触发requestLayout
最终会调用的 a onLayout
。因此,您最终会在布局中间触发布局。
addViewInLayout
是一个“更安全”的版本,addView
如果你真的必须在onLayout
. 它基本上不会触发布局传递(内部不调用 requestLayout)。
有关更多详细信息,请参阅此视频(由 android 工程师提供):http ://www.youtube.com/watch?v=HbAeTGoKG6k
addViewInLayout
在布局期间添加视图。如果在 onLayout() 方法中需要添加更多视图(例如列表视图),这很有用。如果 index 为负数,则表示将其放在列表的末尾。
添加视图
将传递的 LayoutParams 分配给传递的 View 并将视图添加到窗口中。
*请注意,addView 是由ViewManager
一个接口实现的,可让您向 Activity 添加和删除子视图,因此您将能够在运行时(动态)将视图添加到 ViewGroup。另请注意, addViewInLayout 是 ViewGroup 的受保护方法,因此如果您要创建自定义视图组,则可以调用addViewInLayout()
方法onLayout()
。
有关更多信息,请参阅此
例如:我们有一个布局(mLayout),你想在这个布局中添加2个视图(view1,view2)。所以有2种方法(相同)
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;
}
}
});
我没有时间测试它。任何人都可以帮我说得更清楚。