从当前活动中获取根视图

时间:2010-12-20 00:40:34

标签: android android-activity view

我知道如何使用View.getRootView()获取根视图。我还可以从按钮的onClick事件中获取视图,其中参数为View。但是如何在activity中获得视图

12 个答案:

答案 0 :(得分:970)

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

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布局中为此视图设置id并改为使用此ID。

答案 1 :(得分:257)

这是我用来获取分配了setContentView的XML文件中的根视图:

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

答案 2 :(得分:123)

我在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@#######

请确认。

答案 3 :(得分:26)

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

在我们的活动中,我们可以使用以下内容获取root视图:

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

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

答案 4 :(得分:17)

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

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

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

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

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

希望这有助于某人

答案 5 :(得分:12)

在Kotlin中,我们可以做的短一些:

val rootView = window.decorView.rootView

答案 6 :(得分:3)

Kotlin扩展解决方案

使用它来简化活动中的访问。然后,您可以直接从“活动”中引用rootView,也可以直接在活动之外引用activity.rootView

val Activity.rootView get() = window.decorView.rootView

如果您想为片段添加相同的内容,请添加:

val Fragment.rootView get() = view?.rootView

答案 7 :(得分:2)

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

答案 8 :(得分:1)

对于那些使用Data Binding Library的人来说,要获取当前活动的根源,只需使用:

View rootView = dataBinding.getRoot();

对于Kotlin用户,它甚至更简单:

val rootView = dataBinding.root

答案 9 :(得分:1)

另一个Kotlin扩展解决方案

如果您的活动视图是在xml中声明的(例如activity_root.xml),请打开xml并将ID分配给根视图:

android:id="@+id/root_activity"

现在在您的课程中,使用以下命令导入视图:

import kotlinx.android.synthetic.main.activity_root.root_activity

您现在可以将root_activity用作视图。

答案 10 :(得分:0)

如果你在一个活动中,假设只有一个根视图,你就可以这样做。

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

然后你可以将它投射到真正的班级

或者您可以使用

getWindow().getDecorView();

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

下方

答案 11 :(得分:0)

获取当前活动的视图

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

查看视图= view.getRootView();

并获取片段中的视图

View view = FragmentClass.getView();