如何编程更改输入方法



我需要根据语言更改更改键盘。

我已经进行了一些研究,发现可以使用这些API

完成。
  1. inputmethodmanager setInputmethod(android.os.ibinder,java.lang.string)
  2. 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;这是我的解决方案:

注意:您需要将应用程序安装为系统应用程序或使用平台键签名。

  1. 在AndroidManifest.xml中添加写入安全设置权限:

    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
    
  2. 使用InputMethodService switchInputMethod(字符串inputmethodid)(如果适用)。示例:switchInputMethod("com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME");

相关内容

  • 没有找到相关文章

最新更新