2012-11-02 33 views
4

是否可以獲取特定視圖(或PopupWindow)的Window對象?如何從InputMethodService獲取窗口?

我的應用程序是一個鍵盤,所以它是一個Service(一個InputMethodService),而不是一個Activity。因此我不能使用Activity.getWindow()。然而,它有視圖,所以它可能也有一個窗口,不是嗎?我如何得到它?

在此先感謝...

+0

非常好的問題,的確如此。我可以想到兩種可能的方法:(1)使用'View.getWindowToken',然後嘗試從檢索到的'IBinder'界面進入窗口。我不知道它的實現是什麼,所以你可以嘗試使用反射來看看你回來的東西; (2)使用'Context.getSystemService(WINDOW_SERVICE)'獲得WindowManager - 並嘗試從那裏開始。我還沒有嘗試過這兩種方式,因此將其作爲評論發佈,而不是回答。 –

+0

@AleksG:對不起,這個遲到的回覆。我已經嘗試了你的兩個建議,但都沒有成功。謝謝! –

回答

1

我找到了解決辦法:

InputMethodService ims; 
    ... 
    Dialog dialog = ims.getWindow(); 
    Window window = dialog.getWindow(); 

或者乾脆:

Window window = ims.getWindow().getWindow(); 

(此作品與InputMethodService而不一定適用於其他服務)

+0

如何初始化InputMethodService對象'ims'? –