7

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

它们之间有什么区别?如果我用另一个替换一个会发生什么?

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

谢谢。

BR,亨利

附言。添加更多标签:removeview、removeviewinlayout

4

3 回答 3

16

addView在内部调用通常是个坏主意,onLayout因为addView内部会触发requestLayout最终会调用的 a onLayout。因此,您最终会在布局中间触发布局。

addViewInLayout是一个“更安全”的版本,addView如果你真的必须在onLayout. 它基本上不会触发布局传递(内部不调用 requestLayout)。

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

于 2013-06-20T06:25:31.457 回答
4

addViewInLayout

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

添加视图

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

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

有关更多信息,请参阅

于 2013-05-07T04:54:57.310 回答
1

例如:我们有一个布局(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;
            }

        }
    });

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

于 2015-01-13T17:30:38.807 回答