Подтвердить что ты не робот

Почему нет метода getContentView() для Activity?

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

4b9b3361

Ответ 1

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

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(), "");

Ответ 2

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

findViewById(android.R.id.content);

он по существу такой же, как (его нужно вызвать в контексте Activity)

this.findViewById(android.R.id.content);

Ответ 3

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