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

Posted

技术标签:

【中文标题】以编程方式更改键盘输入语言【英文标题】:Change Keyboard Input Language Programmatically 【发布时间】:2016-07-15 15:25:54 【问题描述】:

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

I know this is possible, because in default keyboard app, when multiple input methods are selected, then long pressing the spacebar allows to change the input methods at runtime, if this is possible then my requirement is also possible...

我不想提示输入默认键盘,如下所示:

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);

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

【问题讨论】:

【参考方案1】:

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

您需要先在应用的 AndroidManifest.xml 中授予 Android 权限

"android.permission.WRITE_SECURE_SETTINGS"

然后你需要确定你的键盘的id。

-> 要知道 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");

享受吧!

【讨论】:

在授予写入安全设置权限后,应用程序崩溃了。它说只有系统应用程序才允许系统权限。 只有系统应用可以设置自定义键盘。【参考方案2】:

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

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 覆盖函数中添加这些最终静态键作为开关情况,并在这些情况下相应地设置键盘:

setKeyboard(mEngQwertyKeyboard);

【讨论】:

对于不同的语言需要创建不同的 xml 的键盘布局? 只有系统应用可以设置自定义键盘。 在授予写入安全设置权限后,应用程序崩溃了。它说只有系统应用程序才允许系统权限。 你能否描述正确和完整的描述,我很困惑如何实现这些等等。

以上是关于以编程方式更改键盘输入语言的主要内容,如果未能解决你的问题,请参考以下文章

在UITextfield中输入文本后以编程方式更改焦点

您可以以编程方式更改 android 键盘文本字体吗?

以编程方式在android中的软输入键盘上禁用语音到文本按钮(麦克风)

如何通过android中的软键盘以编程方式将我的EditText输入限制为反斜杠(/),tild(〜)等特殊字符

以编程方式为我的应用禁用键盘

以编程方式从自定义 android 键盘更改键盘