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

6

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

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

我不想像以下那样提示默认键盘:

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个回答

4

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

您需要先在应用程序的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");

祝您愉快!


在授予权限写入安全设置后,应用程序崩溃了。它说系统权限只允许由系统应用程序使用。 - PRATEEK BHARDWAJ
只有系统应用可以设置自定义键盘。 - PRATEEK BHARDWAJ

-8

在进行了一些研究后,我找到了答案。首先,您需要创建一个扩展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,并在case中相应地设置键盘:
setKeyboard(mEngQwertyKeyboard);

1
需要为不同的语言创建不同的键盘布局的 XML 吗? - sneha desai
只有系统应用程序才能设置自定义键盘。 - PRATEEK BHARDWAJ
1
在授予权限写入安全设置后,应用程序崩溃了。它说系统权限仅由系统应用程序允许。 - PRATEEK BHARDWAJ
你能否描述一下正确而完整的说明,我有些困惑如何实现这些等。 - Dharmik Ghori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接