如何获取 DecorVIew 的 activity? DecorView 上的 .getContext() 获取 DecorContext

How to get activity of a DecorVIew? .getContext() on DecorView getting a DecorContext

在 Android 7 上,正在获取 DecorView returns 和 DecorContext class 的上下文,而不是 Activity。我曾经使用 Activity a = (Activity)view.getContext() 获得 activity 但它不再适用于 Android 7 上的 DecorView。有什么有效的方法可以从 DecorView 获取 activity 吗?

我正在使用反射获取 DecorView 的 window,然后暂时获取那个 window(这是一个 Acitivity)的上下文。

Field f = decorView.getClass().getDeclaredField("mWindow");
f.setAccessible(true);
Window w = (Window) f.get(decorView);
Activity a = (Activity) w.getContext();

有什么方法可以使用标准 API 吗?

在 Android 7 (Nougat) Android 中引入了 multi-window 功能,使您可以在屏幕上同时打开 2 个活动(无论是您的活动还是 2 个不同的活动) .为此,他们引入了一个名为 DecorContext 的新 class 供 DecorView 使用。 DecorContext 是(引用)"Context for decor views which can be seeded with pure application context and not depend on the activity, but still provide some of the facilities that Activity has, e.g. themes, activity-based resources, etc."。这意味着 DecorView 不再知道它与哪个 Activity 相关,只知道与哪个 Application 相关。因此,从牛轧糖向前推进,无法仅从 DecorView 获得 Activity

不确定它是否仍然与您相关,但您可以这样做:

Activity a = (Activity) decorView.findViewById(android.R.id.content).getContext();