如何获取DecorView的Activity?在DecorView上使用.getContext()可以获取DecorContext。

7
在 Android 7 上,获取 DecorView 的上下文会返回 DecorContext 类,而不再是 Activity。以前可以使用 Activity a = (Activity)view.getContext() 来获取 Activity,但是在 Android 7 上无法用于 DecorView。是否有更有效的方法从 DecorView 中获取 Activity?
目前,我正在使用反射来获取 DecorView 的窗口,并获取该窗口的上下文(即 Activity)。
Field f = decorView.getClass().getDeclaredField("mWindow");
f.setAccessible(true);
Window w = (Window) f.get(decorView);
Activity a = (Activity) w.getContext();

有没有使用标准API的方法?
1个回答

7
在Android 7(Nougat)中,Android引入了多窗口功能,使您可以在屏幕上同时打开2个活动(无论是您的活动还是2个不同的活动)。为此,他们引入了一个名为DecorContext的新类,供DecorView使用。引用“装饰视图的上下文可以使用纯应用程序上下文进行播种,并且不依赖于活动,但仍然提供Activity具有的某些功能,例如主题、基于活动的资源等。”这意味着DecorView不再知道它所关联的Activity,只知道它关联的Application。因此,从Nougat开始,仅从DecorView中无法获取Activity
不确定是否仍然与您相关,但您可以执行以下操作:
Activity a = (Activity) decorView.findViewById(android.R.id.content).getContext();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接