Получить корневой вид из текущей активности - PullRequest
594 голосов
/ 20 декабря 2010

Я знаю, как получить представление root с помощью View.getRootView () .Я также могу получить представление из события onClick кнопки, аргументом которого является View .Но как я могу получить представление в занятии ?

Ответы [ 9 ]

978 голосов
/ 20 декабря 2010

Если вам нужен корневой вид вашей активности (чтобы вы могли добавить туда свое содержимое), используйте

findViewById(android.R.id.content)

Также сообщалось, что на некоторых устройствах вы должны использовать

getWindow().getDecorView().findViewById(android.R.id.content)

вместо этого.

Обратите внимание, что, как сообщал Booger, на некоторых устройствах это может быть за панелью навигации (с кнопкой возврата и т. д.) (но на большинстве устройств это не так).

Если вам нужно получить представление о том, что вы добавили в свою деятельность, используя метод setContentView(), то, как писал pottedmeat, вы можете использовать

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

Но лучше просто установить идентификатор для этого представления в макете XML и использовать вместо него этот идентификатор.

258 голосов
/ 21 февраля 2011

Это то, что я использую для получения корневого представления, найденного в файле XML, назначенном с setContentView:

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);
123 голосов
/ 19 июля 2012

Я проверял это в Android 4.0.3, только:

getWindow().getDecorView().getRootView()

дают то же представление, что мы получаем от

anyview.getRootView();

com.android.internal.policy.impl.PhoneWindow$DecorView@#########

и

getWindow().getDecorView().findViewById(android.R.id.content)

давая ребенку его

android.widget.FrameLayout@#######

Пожалуйста, подтвердите.

29 голосов
/ 29 ноября 2016

Получить корневой вид текущей активности.

Внутри нашей деятельности мы можем получить root представление с:

ViewGroup rootView = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

или

View rootView = getWindow().getDecorView().getRootView();
17 голосов
/ 26 марта 2016

Просто, если кому-то нужен более простой способ:

Следующий код дает представление о всей деятельности:

View v1 = getWindow().getDecorView().getRootView();

Чтобы получить определенный вид в действии, например, imageView внутри действия, просто добавьте идентификатор того представления, которое вы хотите получить:

View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);

Надеюсь, это кому-нибудь поможет

15 голосов
/ 25 октября 2018

В Котлине мы можем сделать это немного короче:

val rootView = window.decorView.rootView
2 голосов
/ 13 мая 2018

anyview.getRootView(); будет самым простым способом.

0 голосов
/ 12 апреля 2018

, чтобы получить Просмотр текущей активности

в любом onClick мы будем получать «View view», с помощью «view» получить rootView.

View view = view.getRootView ();

и получить Просмотр во фрагменте

Просмотр вида = FragmentClass.getView ();

0 голосов
/ 28 июля 2016

если вы находитесь в упражнении, предположим, что есть только одно корневое представление, вы можете получить его следующим образом.

ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
        .findViewById(android.R.id.content)).getChildAt(0);

затем вы можете привести его к реальному классу

иливы можете использовать

getWindow().getDecorView();

обратите внимание, что это будет включать в себя вид панели действий, ваш вид ниже вида панели действий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...