显示软键盘 onResume

4

我在这个问题上并没有找到明确的答案。我的应用程序中有一个带EditText字段的Activity,软键盘在manifest文件中设置为可见,所以当Activity启动时键盘是可见的,但是如果用户导航离开然后使用返回按钮返回,键盘就会隐藏起来(我需要在恢复时使其可见)。

我已经在onResume方法中添加了以下代码,但好像不起作用?有什么建议吗?

private void showSoftKeyboard(){
    quickListName.requestFocus();
    InputMethodManager imm = D(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(quickListName,InputMethodManager.SHOW_IMPLICIT);
}
6个回答

5

试一下这个:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

2

之前,我在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);

0
尝试在收到 onStop 回调时,在 EditText 上调用 clearFocus

如果我理解你的问题是这样的,那么我曾尝试重写 onStop() 方法并在 EditText 上调用 clearFocus() 方法,但没有改变,键盘仍然隐藏。 - GordonW
文档显示SHOW_IMPLICIT可能无法显示键盘,您可以尝试使用InputMethodManager.SHOW_FORCED。 - Jorge Mendez
尝试过这个但没有变化,在返回到活动时键盘被隐藏。 - GordonW

0
尝试 { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); } catch (Exception e) { e.printStackTrace(); }

0

在片段的 onResume 中不应尝试显示键盘。使用 InputMethodManager.toggleSoftInput 是一种 hack,无法在 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);
}

0

试试这个:

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()方法中关闭它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接