以编程方式更改键盘输入语言

时间:2016-03-28 11:12:55

标签: java android keyboard

我正在开发一个应用程序,我需要允许用户根据请求或默认情况下更改默认键盘中显示的输入键,例如,我可能会提示用户在开始时选择默认语言和之后,每当使用默认键盘时,应用程序始终会显示所选语言的键盘键,

我知道这是可能的,因为在默认的键盘应用程序中,当选择了多个输入法时,长按空格键可以在运行时更改输入法,如果可以,那么我的要求也是可能的...... < / p>

我不想提示默认键盘如下:

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

我不想改变语言环境并一直重启我的活动,如:

Resources res = getBaseContext().getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale("ru".toLowerCase());
res.updateConfiguration(conf, dm);
Log.i("inside onStart","after ever");   
setContentView(R.layout.activity_main);

我只想用我想要的语言显示键盘输入。

2 个答案:

答案 0 :(得分:2)

只有在出于安全原因,您的应用作为系统应用运行时,您才可以在没有用户通知的情况下更改键盘。

您需要先在应用的AndroidManifest.xml中提供Android权限

"android.permission.WRITE_SECURE_SETTINGS"

然后您需要确定键盘的ID。

- &GT;要知道id,你需要手动保持键盘默认设置菜单,然后将此打印件放在某处,

System.out.println(Settings.Secure.getString(getContentResolver(),Settings.Secure.DEFAULT_INPUT_METHOD));

一旦你打印了id并且你知道你的键盘ID,你就可以按照下面的说法进行操作 (我已将默认键盘更改为日语)

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

//imeManager.showInputMethodPicker(); //This is to see available keyboards.
imeManager.setInputMethod(null,"jp.co.omronsoft.openwnn/.OpenWnnJAJP");

享受!!

答案 1 :(得分:-6)

在这里做了一些研究之后找到了答案,首先你必须创建一个自定义键盘View,它扩展了keyboardView,并在其中创建静态键值变量,如

static final int KEYCODE_LANGUAGE_SWITCH_ENG = -102;
static final int KEYCODE_LANGUAGE_SWITCH_URDU = -103;

之后,在已实现inputMethodService的IME类中,在onInitializeInterface覆盖函数内创建键盘。像

mSymbolsKeyboard = new Keyboard(this, R.xml.qwerty2);
mEngQwertyKeyboard = new Keyboard(this, R.xml.eng_qwerty);

之后在onKey覆盖函数中添加这些最终静态键作为switch case,并在相应的情况下设置键盘:

setKeyboard(mEngQwertyKeyboard);