53

The Activity class has a setContentView() method. The PopupWindow Class has a getContentView() method but nothing else does. Is there another way to get the main content view for an activity?

azizbekian
  • 60,783
  • 13
  • 169
  • 249
kencorbin
  • 1,958
  • 1
  • 20
  • 18

3 Answers3

53

I was able to get to the contents of an Activity with this call:

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

You should probably check that getDecorView returns an instanceof ViewGroup for all cases, but with a LinearLayout in the Activity the code above runs fine. To get to the LinearLayout you could then just:

LinearLayout content = (LinearLayout)view.getChildAt(0);

And if you have a function like this:

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 + " ");
    }
}

You could iterate through all views and log their class names with the following call inside your Activity:

logContentView(getWindow().getDecorView(), "");
mikeplate
  • 1,149
  • 8
  • 10
  • 1
    +1 Used ViewGroup view = (ViewGroup)getWindow().getDecorView(); to clear all views from an activity by calling view.removeAllViews(); - thanks for the answer! – AgentKnopf Mar 27 '12 at 10:48
52

Following line will do the trick:

findViewById(android.R.id.content);

it is essentially same as (it needs to be called on the context of an Activity)

this.findViewById(android.R.id.content);
moonlightdock
  • 1,358
  • 13
  • 14
3

I'm looking for this as well, but I just thought that it might be easier to add an id to the outermost 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">

I'll keep looking for a few more minutes, though. I'm into it so that I can use findViewWithTag from the outermost layout.

bibby
  • 847
  • 1
  • 8
  • 13
  • 1
    This also works with findViewById. I hadn't realised that you could put an id in the outermost tag of the xml. This is how I use: thisView = (View) findViewById(R.id.parent_view); – Caspar Harmer Feb 16 '11 at 22:56