Класс Activity
имеет метод setContentView()
. Класс PopupWindow
имеет метод getContentView()
, но ничего не делает. Есть ли другой способ получить основное представление контента для активности?
Почему нет метода getContentView() для Activity?
Ответ 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 из самого внешнего макета.