我正在尝试将布局从qwerty更改为qwertz / azerty等。
Android在拉丁语IME下有不同的InputMethodSubtypes,它有不同语言的不同布局。我想要做的是允许用户根据他们的偏好切换键盘布局。
答案 0 :(得分:0)
我知道自从这篇文章以来已经很长时间了,但我最近试图实现相同的,改变键盘区域设置,所以这可能对某人有用。
简而言之,如果应用程序没有系统级权限,则无法进行。建议显示设置对话框,如下图:
InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showInputMethodPicker();
如果您的应用具有系统级权限(不太可能),您可以执行以下操作:
在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions"/>
请尝试以下代码:
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.DEFAULT_INPUT_METHOD
);
List<InputMethodInfo> enabledInputMethodList = inputMethodManager.getEnabledInputMethodList();
for (InputMethodInfo inputMethodInfo : enabledInputMethodList) {
if (inputMethodInfo.getId().equals(id)) {
List<InputMethodSubtype> enabledInputMethodSubtypeList = inputMethodManager.getEnabledInputMethodSubtypeList(inputMethodInfo, true);
for (InputMethodSubtype subtype : enabledInputMethodSubtypeList) {
if (subtype.getLocale().equals(locale)) {
Settings.Secure.putInt(context.getContentResolver(),
Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE, subtype.hashCode());
}
}
}
}
当然,上述方法很麻烦,只有在您的应用具有系统级权限时才能使用。我在使用AOSP图像和使用Android OS平台密钥签名的应用程序闪存的设备上尝试了它。