2012-04-02 61 views
11

我有一个关于Android活动的问题。一个活动的方法为addContentView(View),而ViewGroup有一个(类似的)addView(View)方法。不幸的是,它的无证件“Where”来自addContentView的视图被放置。它是否像LinearLayout只是将视图添加到底部?它更像是一个FrameLayout,它增加了它的视图“onTop”?它取决于setContentView设置的ViewGroup? 如果我潜入源中,我会看到addContentView将调用Window的抽象方法addContentView。不幸的是我看不出哪个类正在实现这个方法。那么,活动addContentView的行为究竟是什么?Activity.addContentView(View)== ViewGroup.addContentView(View)?

回答

37

每个活动的基本布局是FrameLayout。这意味着您通常通过setContentView()设置的布局是此布局的一个子项。 addContentView()只增加了另一个孩子,因此它的行为类似于FrameLayout(这意味着它会在现有的UI元素之上添加新的UI元素)

您可以使用ANDROID_SDK\tools文件夹中名为hierachyviewer的工具进行检查。这里有两个截图:

enter image description here

这是布局调用addContentView()之前,我的活动包括默认的FrameLayout的,持有的LinearLayout一个按钮(我的布局在这里)。这反映在这里的最后一行,上面的其他元素是标题/状态栏。

enter image description here

通过addContentView()添加一个TextView之后,它看起来是这样的。你可以看到基础FrameLayout有一个新的孩子。

+3

哇。非常感谢您的回答,谢谢。你的建议和你建议的工具将为我节省很多时间!你是使Stackoverflow如此之好的用户! – 2012-04-02 16:22:12

+0

很好的回答!支持! – 2013-01-07 06:59:50

+1

+1为'hierachyviewer' – RootCode 2013-08-02 09:18:48