3

我想通过单击按钮在我的 EditText 上显示 Google 语音输入 IME。所以,根据这篇文章和源代码我应该写这段代码

inputMethodManager.setInputMethodAndSubtype(IBinder token, String id, InputMethodSubtype subtype)

问题是:在哪里可以找到合适的令牌。在源代码中我看到了这个

mInputMethodService.getWindow().getWindow().getAttributes().token

它工作得很好,但是这段代码位于 InputMetodService 超类中,因此它可以访问 InputMethodService 实例。但我没有(不幸的是:))。

如果您有任何建议,请告诉我。谢谢。

不工作: EditText.getWindowToken()

4

1 回答 1

4

由于安全原因,android 不允许应用程序更改 inputMethod 类型。您提到的文章是用于将谷歌输入法集成到自定义实现的输入法中,它不适用于应用程序。你可以在这里查看 InputMethodManager 的文档

客户端应用程序可以要求系统让用户选择一个新的 IME,但不能以编程方式切换到它自己这避免了恶意应用程序将用户切换到他们自己的 IME,当用户导航到另一个应用程序时,它仍然在运行。另一方面,允许 IME 以编程方式将系统切换到另一个 IME,因为它已经完全控制了用户输入。

您可以在 onClick 回调中提示用户切换到新的 IME,如下所示:

InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showInputMethodPicker();
于 2013-06-13T10:35:42.160 回答