为何没有Activity的getContentView()方法?

Activity类具有setContentView()方法。 PopupWindow类具有getContentView()方法,但没有其他操作。 是否有另一种方法来获取活动的主要内容视图?

kencorbin asked 2020-01-24T03:30:43Z
3个解决方案
51 votes

我可以通过此调用获取活动的内容:

ViewGroup view = (ViewGroup)getWindow().getDecorView();

您可能应该检查所有情况下getDecorView是否返回ViewGroup的instance,但是在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(), "");
mikeplate answered 2020-01-24T03:31:30Z
50 votes

以下行将解决问题:

findViewById(android.R.id.content);

它本质上与(需要在Activity的上下文中调用)相同

this.findViewById(android.R.id.content);
moonlightdock answered 2020-01-24T03:31:54Z
3 votes

我也在寻找这个,但我只是想将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。

bibby answered 2020-01-24T03:32:19Z
translate from https://stackoverflow.com:/questions/3736367/why-isnt-there-a-getcontentview-method-for-activity