Как получить активность 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 ответ:
В Android 7 (Nougat) Android представила функцию мультиокна, позволяющую открывать сразу 2 действия на экране (будь то ваши действия или 2 разных). Для этого они ввели новый класс под названием
DecorContext
, который будет использоватьсяDecorView
.DecorContext
является (цитата) "контекстом для представлений декора, которые могут быть заполнены чистым контекстом приложения и не зависят от активности , но все же обеспечивают некоторые из объектов, которыми обладает активность, например темы, основанные на активности ресурсов и т. д.". Это означает, чтоDecorView
больше не знает, к какомуActivity
он относится, только к какомуApplication
. Следовательно, идя вперед от нуги, нельзя получитьActivity
только отDecorView
.Не уверен, что это все еще относится к вам, но вы можете сделать это:
Activity a = (Activity) decorView.findViewById(android.R.id.content).getContext();