如何为 android 中的子类型加载不同的键盘布局?
How to load a different keyboard layout for subtype in android?
我正在使用 android 示例 keyboard。它包括 En (US) 和 En (GB) subtypes
。选择 subtypes
中的任何一个时,它只会更改空格键上的标志。
说我想根据选择的 subtype
更改布局,但我无法这样做。
到目前为止,我已经为英语 (GB) 创建了另一个 xml 文件,我将其命名为 qwerty_gb.xml
(为了测试,我交换了 Return
和 Del
键)
然后声明为私有
LatinKeyboard mQwertyKeyboardGB;
并在 Softkeyboard.java
的 onInitializeInterface
覆盖方法中将其与默认键盘一起初始化
像这样:
mQwertyKeyboardGB = new LatinKeyboard(this, R.xml.qwerty_gb);
我不知道我在这里错过了什么。
通过以下修改编辑 SoftKeyboard.java
文件,以便为每个子类型设置特定的布局。
1- 首先参考您的布局。
mQwertyKeyboard = new LatinKeyboard(this, R.xml.qwerty);
mPersianKeyboard = new LatinKeyboard(this, R.xml.persian);
2- 在 OnCreateInputView
中添加以下内容以应用正确的布局。
InputMethodSubtype subtype = mInputMethodManager.getCurrentInputMethodSubtype();
switch(subtype.getLocale()) {
case "fa_IR":
setLatinKeyboard(mPersianKeyboard);
break;
case "en_US":
setLatinKeyboard(mQwertyKeyboard);
break;
}
如果区域设置为 fa_IR
,则上述代码适用 mPersianKeyboard
。语言环境 fa_IR
在 method.xml
.
中设置
<subtype
android:label="@string/label_subtype_generic"
android:icon="@drawable/icon_en_us"
android:imeSubtypeLocale="en_US"
android:imeSubtypeMode="keyboard" />
<subtype
android:label="@string/label_subtype_generic"
android:icon="@drawable/icon_en_gb"
android:imeSubtypeLocale="fa_IR"
android:imeSubtypeMode="keyboard" />
3- 最后修改 `onCurrentInputMethodSubtypeChanged 方法如下:
@Override
public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype) {
mInputView.setSubtypeOnSpaceKey(subtype);
switch(subtype.getLocale()) {
case "fa_IR":
setLatinKeyboard(mSymbolsKeyboard);
break;
case "en_US":
setLatinKeyboard(mQwertyKeyboard);
break;
};
}
注意: API 级别 24 中不推荐使用 getLocale()
方法。请改用 getLanguageTag()
。最好是检查版本,正确的方法使用正确的版本。
我正在使用 android 示例 keyboard。它包括 En (US) 和 En (GB) subtypes
。选择 subtypes
中的任何一个时,它只会更改空格键上的标志。
说我想根据选择的 subtype
更改布局,但我无法这样做。
到目前为止,我已经为英语 (GB) 创建了另一个 xml 文件,我将其命名为 qwerty_gb.xml
(为了测试,我交换了 Return
和 Del
键)
然后声明为私有
LatinKeyboard mQwertyKeyboardGB;
并在 Softkeyboard.java
的onInitializeInterface
覆盖方法中将其与默认键盘一起初始化
像这样:
mQwertyKeyboardGB = new LatinKeyboard(this, R.xml.qwerty_gb);
我不知道我在这里错过了什么。
通过以下修改编辑 SoftKeyboard.java
文件,以便为每个子类型设置特定的布局。
1- 首先参考您的布局。
mQwertyKeyboard = new LatinKeyboard(this, R.xml.qwerty);
mPersianKeyboard = new LatinKeyboard(this, R.xml.persian);
2- 在 OnCreateInputView
中添加以下内容以应用正确的布局。
InputMethodSubtype subtype = mInputMethodManager.getCurrentInputMethodSubtype();
switch(subtype.getLocale()) {
case "fa_IR":
setLatinKeyboard(mPersianKeyboard);
break;
case "en_US":
setLatinKeyboard(mQwertyKeyboard);
break;
}
如果区域设置为 fa_IR
,则上述代码适用 mPersianKeyboard
。语言环境 fa_IR
在 method.xml
.
<subtype
android:label="@string/label_subtype_generic"
android:icon="@drawable/icon_en_us"
android:imeSubtypeLocale="en_US"
android:imeSubtypeMode="keyboard" />
<subtype
android:label="@string/label_subtype_generic"
android:icon="@drawable/icon_en_gb"
android:imeSubtypeLocale="fa_IR"
android:imeSubtypeMode="keyboard" />
3- 最后修改 `onCurrentInputMethodSubtypeChanged 方法如下:
@Override
public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype) {
mInputView.setSubtypeOnSpaceKey(subtype);
switch(subtype.getLocale()) {
case "fa_IR":
setLatinKeyboard(mSymbolsKeyboard);
break;
case "en_US":
setLatinKeyboard(mQwertyKeyboard);
break;
};
}
注意: API 级别 24 中不推荐使用 getLocale()
方法。请改用 getLanguageTag()
。最好是检查版本,正确的方法使用正确的版本。