关于android:从当前活动中获取根视图

Get root view from current activity

我知道如何使用View.getRootView()获取根视图。 我也能从按钮的onClick事件中获取视图,其中参数是View。 但是如何在活动中获取视图?


如果您需要您的活动的根视图(因此您可以在那里添加您的内容)使用

1
findViewById(android.R.id.content)

另据报道,在某些设备上你必须使用

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

代替。

请注意,正如Booger报道的那样,这可能在某些设备上的导航栏(带后退按钮等)后面(但在大多数设备上似乎不是这样)。

如果您需要使用setContentView()方法获取添加到活动中的视图,那么就像pottedmeat写的那样,您可以使用

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

但最好只在xml布局中将id设置为此视图并改为使用此id。


这是我用来获取在setContentView指定的XML文件中找到的根视图:

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


我在android 4.0.3中测试过这个,只有:

1
getWindow().getDecorView().getRootView()

给出我们得到的相同的观点

1
2
3
anyview.getRootView();

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

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

给孩子的

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

请确认。


从当前活动中获取根视图。

在我们的活动中,我们可以获得root视图:

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

要么

1
View rootView = getWindow().getDecorView().getRootView();


只是因为有人需要一种更简单的方法:

以下代码提供了整个活动的视图:

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

要在活动中获取certian视图,例如活动中的imageView,只需添加您想要获取的视图的ID:

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

希望这有助于某人


在Kotlin,我们可以做得更短一些:

1
val rootView = window.decorView.rootView


anyview.getRootView();将是最简单的方法。


获取当前活动的视图

在任何onClick我们将获得"查看视图",通过使用'view'获取rootView。

View view = view.getRootView();

并获取片段中的视图

View view = FragmentClass.getView();


如果你在一个活动中,假设只有一个根视图,你可以像这样得到它。

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

然后你可以将它投射到真正的课堂上

或者你可以使用

1
getWindow().getDecorView();

请注意,这将包括操作栏视图,您的视图位于操作栏视图下方