13

我有一个关于 Android Activity 的问题:

一个活动有方法addContentView(View),而视图组有一个(类似的?)addView(View)方法。

不幸的是,它没有记录放置视图addContentView的位置。是LinearLayout只是将 View 添加到底部,还是更像是FrameLayout添加其 Views "onTop" ?它取决于ViewGroupset bysetContentView吗?

如果我深入研究源代码,我会看到它addContentView会调用Window's abstract Method addContentView。不幸的是,我看不到哪个类正在实现这个方法。那么 Activity 的行为addContentView到底是什么?

4

1 回答 1

45

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

hierachyviewer您可以使用从您的ANDROID_SDK\tools文件夹中调用的工具来检查这一点。下面是两张截图:

在此处输入图像描述

这是调用之前的布局addContentView(),我的活动由默认的 FrameLayout 组成,带有一个带有 Button 的 LinearLayout(我的布局在这里)。这反映在此处的底行,上面的其他元素是标题/状态栏。

在此处输入图像描述

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

于 2012-04-02T16:16:21.483 回答