gpt4 book ai didi

android - 如何以编程方式更改输入法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:17 29 4
gpt4 key购买 nike

我需要根据语言的变化来改变键盘。

我做了一些研究,发现可以使用这些 API 来完成

  1. InputMethodManager setInputMethod(android.os.IBinder, java.lang.String)
  2. InputMethodService switchInputMethod(java.lang.String)

对于第一个 API,我需要一个 IBinder token ,它可以通过调用

InputMethodService 实例中获取

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

或者如果我有对 InputMethodService 对象的引用,我可以简单地调用

mInputMethodService.switchInputMethod(id)

更改输入法。

真正的问题是如何获取对 InputMethodService 对象的引用。

附言:我不想使用 InputMethodManager 的 showInputMethodPicker() 因为我想改变我的要求它来 self 现有的包含语言列表的对话框。

我知道这对于用户应用程序是不可能的,但不确定对于系统应用程序是否也是不可能的。

最佳答案

成功!!!

我想到的更改当前 IME 的唯一方法是自定义它。

对于我的回应。问题如果我更改系统语言,我必须将键盘更改为中文从我的自定义设置应用程序到中文。

下面讨论的方法用于自定义 LatinIME 应用。

每个 IME 都有一个扩展 InputMethodService 的类类(class)。在这个类中我们可以覆盖一个方法称为 onInitializeInterface .每次配置更改时都会调用此方法,即当您更改系统区域设置时,它将被调用。

在这里我们可以检查当前选择的 Locale 是否被支持当前 IME 与否。如果没有,那么我们可以通过调用方法加载其各自的 IME switchInputMethod(id) .

要获取id,我们可以通过inputMethodManager进行查询并获取可用 ID 的列表

    String pinyinId = "";

InputMethodManager inputMethodManager = (InputMethodManager) getApplicationContext()
.getSystemService(INPUT_METHOD_SERVICE);
List<InputMethodInfo> inputMethodInfos = inputMethodManager.getInputMethodList();

for (InputMethodInfo inputMethodInfo : inputMethodInfos) {
if (inputMethodInfo.getId().contains("pinyin")) {
pinyinId = inputMethodInfo.getId();
}
}

获取 id 后我们可以调用 switchInputMethod(pinyinId) 它将改变输入法。

关于android - 如何以编程方式更改输入法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305084/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com