2012-11-02 34 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'? –