以编程方式切换键盘配置

时间:2012-06-14 15:30:28

标签: android android-softkeyboard

有没有办法可以通过编程方式切换已安装的键盘(无需手动进入设置部分)?

我的要求是,用户会看到手机上安装的所有键盘,并获得一个选择器对话框以切换到一个愿望?

(基本上我们希望减少将他转移到设置页面的步骤)

6 个答案:

答案 0 :(得分:28)

这段代码将满足您的要求:

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
imeManager.showInputMethodPicker();

正如Commonsware在他的回答中指出的那样,在用户的背后无法做到这一点。

答案 1 :(得分:12)

如果您拥有root设备,则可以使用/system/bin/ime实用程序。

列出所有已安装的输入法:# ime list -a

将谷歌的键盘设为默认值:
# ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

在Java端使用Runtime.getRuntime().exec(...)

答案 2 :(得分:12)

如果您的应用具有系统权限,并且具有权限

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

您可以通过编程方式启用键盘并将其设置为当前键盘,方法是将其设置为默认键盘没有用户知识或干预!

//get the old default keyboard in case you want to use it later, or keep it enabled
String oldDefaultKeyboard = Settings.Secure.getString(resolver, Setting.Secure.DEFAULT_INPUT_METHOD);

//enable your keyboard
Settings.Secure.putString(resolver, Settings.Secure.ENABLED_INPUT_METHODS, "com.my.keyboard/.full.path");

//set your keyboard as the new default keyboard
Settings.Secure.putString(resolver, Settings.Secure.DEFAULT_INPUT_METHOD, "com.my.keyboard/.full.path");

您可以通过提供ENABLED_INPUT_METHODS的键盘列表来启用多个键盘(例如默认键盘和您自己的键盘),用&#39;:&#39;分隔。见docs

您可以通过ime list -a

调用adb shell来验证键盘的完整包和路径ID

答案 3 :(得分:5)

  

我们是否可以通过编程方式切换已安装的键盘(无需进入设置部分)?

幸运的是,不,出于安全考虑。如果应用程序可以指定使用哪种输入法编辑器,恶意软件会将输入法编辑器更改为其键盘记录器。

答案 4 :(得分:0)

    InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
    imeManager.showInputMethodPicker();

此代码将提示用户更改默认键盘

答案 5 :(得分:0)

import android.content.Intent;

import android.view.inputmethod.InputMethodManager;

// To enable keyboard

startActivity(new Intent("android.settings.INPUT_METHOD_SETTINGS"));

// To activate the keyboard

InputMethodManager imeManager = (InputMethodManager) 
getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
imeManager.showInputMethodPicker();