如何显示服务中的软键盘?

简短的问题:是否可以(以及如何)显示服务的软键盘?

很长的问题:我写了一个服务,创build一个“顶部栏”,显示在所有活动的顶部,包含一个EditText。 当EditText被点击时,我想要显示软键盘,但是这没有发生。

当然,我已经从服务的onFocusChange()和onClick()尝试了这一点:

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

我提出的解决方法是通过扩展Activity类并添加一个AIDL接口来请求当前活动显示键盘。 缺点是每个关键事件都必须发回服务(通过另一个AIDL接口)并手动转换为Unicode。

而且,如果当前活动包含EditText,则软键盘仅适用于该活动,并且在select服务的EditText时不再显示。

如果当前活动具有EditText,会阻止显示服务的软键盘? 这可能是Android的限制吗?

Solutions Collecting From Web of "如何显示服务中的软键盘?"

我面临类似的问题。 但在我的情况下,问题是由于使用WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE标志创buildWindowManager.LayoutParams为视图。

并为键盘可见性

 InputMethodManager inputManager = (InputMethodManager) context. getSystemService(Context.INPUT_METHOD_SERVICE); if (inputManager != null) { inputManager.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); } 

如果你想在edittext的touch上显示Soft Keyboard,你为什么不考虑使用onTouchListener和edittext。 我相信edittext.requestfocus()也会这样做。 如果不是,听众肯定会工作。

此外,对于你提到的那种观点,最好使用片段而不是服务来创build视图。