我的应用程序是一种测验:用户应该正确地在文本字段(EditText)中键入单词,用户可以用任何一种语言键入它,具体取决于他选择的语言(使用"空格键)在软键盘上滑动")。软键盘在之前显示,并在用户输入后隐藏。但是当下次出现软键盘时,它的输入语言会切换到系统的默认值,不会保持不变,用户最后一次使用过。
我有一个EditText字段:
<EditText
android:id="@+id/textInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions|textVisiblePassword"
/>
选择这些输入类型以避免IME显示单词建议。 (不知何故textNoSuggestions
只是不够。但这不是问题)
当用户需要输入单词时,我强制软键盘显示如下:
void showSoftKeyboard() {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mTextInput, InputMethodManager.SHOW_FORCED);
}
用户完成输入后,我使用此方法强制键盘消失(不再占用屏幕):
void hideSoftKeyboard() {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mTextInput.getWindowToken(), 0);
}
下次出现软键盘时,语言是系统的默认语言。 我怎么能避免这个?
我尝试使用switchToLastInputMethod
强制键盘恢复它的状态:
void showSoftKeyboard() {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mTextInput, InputMethodManager.SHOW_FORCED);
final IBinder token = mTextInput.getWindowToken();
if (token != null) imm.switchToLastInputMethod(token);
}
徒劳的。该语言仍在切换到系统默认值。
注意:输入之间不会重新创建输入字段。它们仍然是相同的,只是隐藏。
另外,我试图记住InputMethodSubtype
,并强制它恢复:
InputMethodSubtype mInputMethodSubtype;
void hideSoftKeyboard() {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
mInputMethodSubtype = imm.getCurrentInputMethodSubtype();
imm.hideSoftInputFromWindow(mTextInput.getWindowToken(), 0);
}
void showSoftKeyboard() {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mTextInput, InputMethodManager.SHOW_FORCED);
if (mInputMethodSubtype != null) {
imm.setCurrentInputMethodSubtype(mInputMethodSubtype);
}
}
但这需要WRITE_SECURE_SETTINGS
权限,并且仅允许系统应用。所以,它不适用。
谢谢