你可以直接使用@隱藏的API,不需要通過訪問類文件來反射,然後添加到Android SDK中的android.jar中。具體方法如下: https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/
而對於Android源。罐子特定Android版本(19,21,22,23,24)可以在這裏抓起:那麼 https://github.com/anggrayudi/android-hidden-api
,你可以直接使用WindowManagerGlobal類來獲取所有的根的觀點類似,
private void logRootViews() {
WindowManagerGlobal windowManagerGlobal = WindowManagerGlobal.getInstance();
String[] rootViewNames = windowManagerGlobal.getViewRootNames();
for (String viewName : rootViewNames) {
View rootView = windowManagerGlobal.getRootView(viewName);
Log.i("", "Root view is: " + viewName + ": " + rootView);
/*do what you want with the rootView*/
}
}
輸出:
根的觀點是:com.example.paintsample/com.example.paintsample.PaintSample/[email protected]:com.android.internal.policy.impl.PhoneWindow $ {DecorView 41dcc278 VE .... R ....... 0,0-768,1184}
根的觀點是:PopupWindow:42887380/[email protected]:android.widget.PopupWindow $ {PopupViewContainer VE 42891450 .... ........ 0,0-424,618}
活動菜單彈出窗口將與Activity相同,Activity.getWindow()不適合你嗎? – kassim
不幸的是,沒有。我運行Android FingerPaint樣品(上4.3)後,我按由三個圓點構成的菜單按鈕,我可以在監視器彈出的是在自己的窗口看到。 我也可以運行「adb shell dumpsys窗口令牌」,並看到繪圖應用程序確實有兩個與之相關的窗口: allAppWindows = [Window {418f9ce8 u0 com.example.paintsample/com.example.paintsample.PaintSample} ,窗口{41a06d08 U0 PopupWindow:41ac65a0}] 同樣的,對話框。 –
只是好奇,爲什麼你會需要這個信息,或者說,你有什麼打算,一旦你擁有它用它做什麼? – Josh