从当前活动获取根视图

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

633955 次浏览

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

findViewById(android.R.id.content).getRootView()

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

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

相反。

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

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

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

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

这是我用来获取根视图的,如在分配有setContentView的XML文件中所示:

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

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

请确认。

只是incase有人需要一个更简单的方法:

下面的代码给出了整个活动的视图:

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

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

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

希望这能帮助到别人

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

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

你就可以把它投到你真正的班级

或者你可以用

getWindow().getDecorView();

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

从当前活动获取根视图。

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

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

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

获取当前活动的视图

在任何onClick中,我们将获得“View view”,通过使用“view”获得rootView。

view.getRootView();

并在片段中获取View

查看视图=FragmentClass.get视图();

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

在静态编程语言中,我们可以做得更短:

val rootView = window.decorView.rootView

静态编程语言扩展解决方案

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

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

如果您想为Fragments添加相同的一致性,请添加:

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

对于那些使用数据绑定库的人,要获取当前活动的根,只需使用:

View rootView = dataBinding.getRoot();

对于静态编程语言用户,它甚至更简单:

val rootView = dataBinding.root

静态编程语言扩展解决方案

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

android:id="@+id/root_activity"

现在在你的类中,使用以下方法导入视图:

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

您现在可以使用root_activity作为视图。