Как получить активность DecorVIew?.getContext () на DecorView получение DecorContext


На Android 7 получение контекста DecorView возвращает класс DecorContext, и это не действие. Я привык получать активность с помощью Activity a = (Activity)view.getContext(), но он больше не работает для DecorView на Android 7. Существует ли какой-либо эффективный способ получить активность от DecorView?

Я использую отражение, чтобы получить окно DecorView, а затем получить контекст этого окна (который является активностью) на данный момент.

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

Есть ли способ, который использует стандартный API?

1 6

1 ответ:

В Android 7 (Nougat) Android представила функцию мультиокна, позволяющую открывать сразу 2 действия на экране (будь то ваши действия или 2 разных). Для этого они ввели новый класс под названием DecorContext, который будет использоваться DecorView. DecorContext является (цитата) "контекстом для представлений декора, которые могут быть заполнены чистым контекстом приложения и не зависят от активности , но все же обеспечивают некоторые из объектов, которыми обладает активность, например темы, основанные на активности ресурсов и т. д.". Это означает, что DecorView больше не знает, к какому Activity он относится, только к какому Application. Следовательно, идя вперед от нуги, нельзя получить Activity только от DecorView.

Не уверен, что это все еще относится к вам, но вы можете сделать это:

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