Android 恢复时显示软键盘
找不到这个问题的明确答案,基本上我有一个带有EditText字段的活动。软键盘被设置为在清单中可见,因此当活动开始时,键盘是可见的。但是,如果用户离开并使用“后退”按钮返回,键盘将隐藏(我需要它在恢复时可见)。 我已经在我的简历中添加了以下方法,但似乎不起作用? 你知道我遗漏了什么吗Android 恢复时显示软键盘,android,onresume,Android,Onresume,找不到这个问题的明确答案,基本上我有一个带有EditText字段的活动。软键盘被设置为在清单中可见,因此当活动开始时,键盘是可见的。但是,如果用户离开并使用“后退”按钮返回,键盘将隐藏(我需要它在恢复时可见)。 我已经在我的简历中添加了以下方法,但似乎不起作用? 你知道我遗漏了什么吗 private void showSoftKeyboard(){ quickListName.requestFocus(); InputMethodManager imm = D(InputMeth
private void showSoftKeyboard(){
quickListName.requestFocus();
InputMethodManager imm = D(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(quickListName,InputMethodManager.SHOW_IMPLICIT);
}
当您收到
onStop
回调时,尝试在EditText
上调用clearFocus
,尝试以下操作:
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
在此之前,我在onResume()方法中使用了以下代码,如果此活动只调用了onPause()方法,则会显示软键盘,然后我返回此活动。但有一种情况是调用了此活动的onStop()方法。当我再次返回此活动时,会调用onResume(),但没有显示软键盘
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(this.getCurrentFocus(), InputMethodManager.SHOW_IMPLICIT);
我在onResume()方法中使用了以下代码,而不是上面提到的代码,以在同时调用此活动的onStop()时显示软键
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
试一试{
InputMethodManager InputMethodManager=(InputMethodManager)activity.getSystemService(Context.INPUT\u方法\u服务);
inputMethodManager.toggleSoftInput(inputMethodManager.SHOW\u强制,0);
}捕获(例外e){
e、 printStackTrace();
}试试这个:
override fun onResume() {
super.onResume()
val imm = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
}
override fun onPause() {
super.onPause()
val imm = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
这将强制键盘在onResume()方法中打开,并在onPause()方法中关闭。您应该不要尝试从片段的onResume中显示键盘。使用
InputMethodManager.toggleSoftInput
是一种黑客行为,在Android 11(R)上不起作用,而且您无法立即知道键盘是否会显示
为什么键盘不显示?
当窗口中的活动刚刚启动(包括从后台返回的活动)时,窗口不会立即标记为已聚焦。当您调用InputMethodManager.showSoftInput
insideonResume
时,它将返回false,因为尽管您试图从中显示键盘的视图可能会被聚焦,但它仍然在一个未聚焦的窗口内。这样键盘就不会出现了
正确的方法是什么?
正确的方法是重写Activity.onWindowFocusChanged,并将其传递给片段,或者直接从片段中显示键盘。以下是后者的一个片段:
@Override
public void onWindowFocusChanged(boolean isFocused) {
if (!isFocused) {
return;
}
InputMethodManager inputMethodManager =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
}
如果我理解正确,我尝试重写onStop()并在编辑文本上添加一个clearFocus,但没有更改,键盘仍然隐藏。文档中说可能不会显示键盘,也许您可以尝试使用InputMethodManager.SHOW\u Forced编辑此项,没有更改,返回活动时键盘隐藏