【发布时间】:2013-10-29 21:58:50
【问题描述】:
是否可以以编程方式枚举所有android.view.Windows 或应用程序中的装饰视图?
Dialogs 例如将在新的Window 中打开,与主活动窗口分开。我可以通过Dialog.getWindow() 找到它们,但我不确定如何使用内置组件(例如活动菜单弹出窗口)来做到这一点。
有什么方法可以通过Application、Context、WindowManager 或其他方式枚举与我的应用关联的 Windows?
我可以使用adb dumpsys window 查看我的应用程序的所有窗口,但我正在寻找一种无需 root 即可在我的应用程序中执行此操作的方法。
【问题讨论】:
-
活动菜单弹出的窗口与活动的相同,Activity.getWindow() 对你不起作用吗?
-
不幸的是,没有。我正在运行 android FingerPaint 示例(在 4.3 上),在我点击三点菜单按钮后,我可以在监视器中看到弹出窗口在它自己的窗口中。我还可以运行“adb shell dumpsys window tokens”并看到绘图应用确实有两个与之关联的窗口:allAppWindows=[Window{418f9ce8 u0 com.example.paintsample/com.example.paintsample.PaintSample}, Window{41a06d08 u0 PopupWindow:41ac65a0}] 与对话框相同。
-
只是好奇,你为什么需要这些信息,或者更确切地说,一旦你有了这些信息你会怎么处理?
-
@Josh 我正在编写一个用于在给定应用程序中截取屏幕截图的库。简单地在根视图上调用 getDrawingCache 就很容易了,但是为了包括像重叠对话框这样的东西,它们不是同一个窗口层次结构,我不得不跳过这个障碍。
-
哇,祝你好运,听起来很痛苦 :)
标签: android android-view android-window