找不到这个问题的明确答案,基本上我有一个带有EditText字段的活动。软键盘在清单中设置为可见,因此当活动开始时键盘是可见的,但如果用户导航离开并使用后退按钮返回,键盘将被隐藏(我需要它在恢复时可见)。我在onResume中添加了以下方法,但似乎不起作用?你知道我在这里错过了什么吗?
private void showSoftKeyboard(){
quickListName.requestFocus();
InputMethodManager imm = D(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(quickListName,InputMethodManager.SHOW_IMPLICIT);
}
试试这个:
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);
当您收到onStop
回调时,尝试在EditText
上调用clearFocus
try{InputMethodManager InputMethodManager=(InputMethodManager)activity.getSystemService(Context.Unput_METHOD_SERVICE);inputMethodManager.thoggleSoftInput(inputMethodManager.SHOW_FORED,0);}catch(异常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)上不起作用,而且你不知道键盘是否会立即显示。
为什么键盘没有显示
当窗口中的活动刚刚启动(包括从后台返回的活动)时,该窗口不会立即标记为已聚焦。当您在onResume
中调用InputMethodManager.showSoftInput
时,它将返回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);
}