如何获得DecorVIew的活动?获取DecorContext

时间:2016-08-31 19:14:40

标签: android android-activity android-context android-7.0-nougat

在Android 7上,获取DecorView的上下文会返回DecorContext个类,而且它不是活动。我曾经使用Activity a = (Activity)view.getContext()获取活动,但它不再适用于Android 7上的DecorView。有没有有效的方法从DecorView获取活动?

我使用反射来获取DecorView的窗口,然后获取该窗口的上下文(这是一个Acitivity)。

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

有没有使用标准API的方式?

1 个答案:

答案 0 :(得分:5)

在Android 7(Nougat)Android中引入了多窗口功能,使您可以在屏幕上一次打开2个活动(无论是您的活动还是2个不同的活动)。为此,他们引入了一个名为DecorContext的新类,供DecorView使用。 DecorContext是(引用)“装饰视图的上下文,可以使用纯应用程序上下文播种,而不依赖于活动,但仍提供一些活动所具有的设施,例如主题,基于活动的资源等。“这意味着DecorView不再知道与Activity相关的Application,只知道Activity。因此,从Nougat前进,无法单独从DecorView获得Activity a = (Activity) decorView.findViewById(android.R.id.content).getContext();

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

[JsonProperty(PropertyName = "something"", ItemTypeNameHandling = TypeNameHandling.Auto, TypeNameHandling = TypeNameHandling.Auto)]
public BaseSomething Something { get; set; }