Activity
类有setContentView()
方法。 PopupWindow
类具有getContentView()
方法,但没有其他方法。是否有其他方法可以获取活动的主要内容视图?
答案 0 :(得分:51)
我可以通过此调用获取活动的内容:
ViewGroup view = (ViewGroup)getWindow().getDecorView();
您应该检查getDecorView是否为所有情况返回ViewGroup的实例,但是在Activity中使用LinearLayout,上面的代码运行正常。要进入LinearLayout,您只需:
LinearLayout content = (LinearLayout)view.getChildAt(0);
如果你有这样的功能:
void logContentView(View parent, String indent) {
Log.i("test", indent + parent.getClass().getName());
if (parent instanceof ViewGroup) {
ViewGroup group = (ViewGroup)parent;
for (int i = 0; i < group.getChildCount(); i++)
logContentView(group.getChildAt(i), indent + " ");
}
}
您可以使用Activity中的以下调用遍历所有视图并记录其类名:
logContentView(getWindow().getDecorView(), "");
答案 1 :(得分:49)
以下行可以解决问题:
findViewById(android.R.id.content);
它与(它需要在Activity的上下文中调用)基本相同
this.findViewById(android.R.id.content);
答案 2 :(得分:3)
我也在寻找这个,但我只是认为将id添加到最外层的ViewGroup可能更容易。
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/outer">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
但是,我会继续寻找几分钟。我进入它,以便我可以使用最外层布局中的findViewWithTag。