可以将多个视图添加到活动的根视图吗?

Art*_*ins 5 android

这可能听起来很愚蠢,但实际上我找不到任何东西.可以在Android中的活动根视图中添加多个视图吗?

所以例如我可以这样:

setContentView(R.layout.main);
setContentView(gLView);
setContentView(otherView);
Run Code Online (Sandbox Code Playgroud)

或者只是将其作为视图检索

FrameLayout layout = (FrameLayout)this.getWindow().getDecorView().findViewById(android.R.id.content);
layout.addView(view1);
layout.addView(view2);
layout.addView(view3);
layout.addView(view4);
Run Code Online (Sandbox Code Playgroud)

这一切似乎都适用于我测试的设备,但它是否能保证能够在所有这些设备上运行?或者我应该人工创建单个FrameLayout添加到根视图并添加所有内容FrameLayout

更多实验: 1)如果我不使用setContentView和打印:

Log.d("Test", this.getWindow().getDecorView().findViewById(android.R.id.content).getClass().getName());
Run Code Online (Sandbox Code Playgroud)

我得到:android.widget.FrameLayout

2)如果我将内容视图设置为例如GLSurfaceView并打印相同Log.d 它也会打印android.widget.FrameLayout

3)如果我setContentView根本不使用,那就干脆做

FrameLayout layout = (FrameLayout)this.getWindow().getDecorView().findViewById(android.R.id.content);
layout.addView(myView);
Run Code Online (Sandbox Code Playgroud)

它附上了视图

所以我假设android.R.id.content返回的不是你设置的内容,setContentView而是你设置的内容,或者活动中的实际根视图(结果是FrameLayout?)

我可以通过这种方式添加多个孩子,但问题是: 我允许这样做吗?

cor*_*992 3

View是的,在根级别添加多个 content 是完全可以的。内容View只是添加到容器中,如果您需要的只是FrameLayout将其用于您的布局,最佳实践是简单地使用它,而不是添加额外的容器层。FrameLayout

如果您要添加新内容View,那么您应该使用addContentView()方法而不是setContentView(),这会导致现有内容被替换。

此外,还可以View通过使用<merge>tag将多个 s 添加到 XML 布局中的内容容器,该 tag 只会替换 base FrameLayout