我需要根据语言更改更改键盘。
我已经进行了一些研究,发现可以使用这些API
完成。
- inputmethodmanager setInputmethod(android.os.ibinder,java.lang.string)
- inputMethodService switchInputmethod(java.lang.string)
对于第一个API,我需要一个 ibinder令牌,可以通过调用
来从 inputMethodService 实例中获取minputmethodservice.getWindow()。getWindow()。getAttributes()。token
,或者如果我提到 inputMethodService 对象,我可以简单地调用
minputmethodservice.switchinputmethod(id)
更改输入方法。
真正的问题是如何获得对InputMethodService对象的引用。
PS:我不想使用inputmethodmanager的showinputmethodpicker(),因为我需要更改它从我现有的对话框中,该对话列表列表。
我知道用户应用程序是不可能的,但不确定系统应用程序是否也无法。
成功!!!
我想出的更改当前IME的唯一方法是自定义。
为我的解答。问题,如果我更改系统语言,我必须将键盘更改为中文从我的自定义设置应用程序到中文。
下面讨论的方法用于自定义拉丁梅 app。
每个IME都有一个扩展InputMethodService类的类。在此课程中,我们可以覆盖一种方法称为OnitializeInterface。当配置更改时,每次都会调用此方法。当您更改系统语言环境时,它将被称为。
在这里,我们可以检查当前选择的语言环境是否由当前IME与否。如果没有,我们可以通过调用该方法来加载其各自的IMEswitchinputmethod(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),它将更改IME。
这是一个古老的问题,但是我在2019年从Google引导了我。我面临着同样的问题&amp;这是我的解决方案:
注意:您需要将应用程序安装为系统应用程序或使用平台键签名。
-
在AndroidManifest.xml中添加写入安全设置权限:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
-
使用InputMethodService switchInputMethod(字符串inputmethodid)(如果适用)。示例:
switchInputMethod("com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME");