在Resume上显示软键盘



找不到这个问题的明确答案,基本上我有一个带有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);
}

相关内容

  • 没有找到相关文章

最新更新