Почему нет метода getContentView () для Activity? - PullRequest
51 голосов
/ 17 сентября 2010

Класс Activity имеет метод setContentView(). Класс PopupWindow имеет метод getContentView(), но больше ничего не делает. Есть ли другой способ получить представление основного контента для действия?

Ответы [ 3 ]

51 голосов
/ 21 ноября 2010

Мне удалось добраться до содержимого Действия с помощью этого вызова:

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

Вероятно, вам следует проверить, что getDecorView возвращает экземпляр ViewGroup для всех случаев, но с LinearLayout в Activity приведенный выше код работает нормально. Чтобы добраться до 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 + " ");
    }
}

Вы можете выполнять итерацию по всем представлениям и регистрировать их имена классов с помощью следующего вызова внутри вашей Деятельности:

logContentView(getWindow().getDecorView(), "");
49 голосов
/ 07 января 2013

Следующая строка поможет:

findViewById(android.R.id.content);

это по сути то же самое, что (его нужно вызывать в контексте действия)

this.findViewById(android.R.id.content);
3 голосов
/ 21 ноября 2010

Я тоже ищу это, но я просто подумал, что, возможно, было бы проще добавить 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 из самого внешнего макета.

...