android - Activity.addContentView( View ) == ViewGroup.addContentView( View )?

标签 android view android-activity window viewgroup

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

Activity 具有方法 addContentView(View) 而 ViewGroup 具有(类似?)addView(View) 方法。

不幸的是,它未记录 addContentView 中的 View 所在的位置。它是像 LinearLayout 只是将 View 添加到底部,还是更像 FrameLayout,将其 View 添加到“onTop”?是否依赖于setContentView设置的ViewGroup

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

最佳答案

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

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

enter image description here

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

enter image description here

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

关于android - Activity.addContentView( View ) == ViewGroup.addContentView( View )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979648/

相关文章:

java - 从一行中读取 float 抛出 ArrayIndexOutOfBoundsException

java - 将 Json 对象存储到 HashMap 中

Android服务器请求监听器

java - Mac 是否需要 JDK(5 或 6)或 Eclipse 来开发 Android 应用程序?

asp.net-mvc - ASP.NET MVC 让我想起了旧的经典 ASP 意大利面条代码

view - Couchdb 查看查询

java - 指南针应用程序无法实例化 Activity

java - 我从 Android ActivityForResult 发送一个可打包类并收到 null

android - 在 Activity 过渡动画期间保持 Action Bar 稳定

java - 创建新文件时的奇怪问题