Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 恢复时显示软键盘_Android_Onresume - Fatal编程技术网

Android 恢复时显示软键盘

Android 恢复时显示软键盘,android,onresume,Android,Onresume,找不到这个问题的明确答案,基本上我有一个带有EditText字段的活动。软键盘被设置为在清单中可见,因此当活动开始时,键盘是可见的。但是,如果用户离开并使用“后退”按钮返回,键盘将隐藏(我需要它在恢复时可见)。 我已经在我的简历中添加了以下方法,但似乎不起作用? 你知道我遗漏了什么吗 private void showSoftKeyboard(){ quickListName.requestFocus(); InputMethodManager imm = D(InputMeth

找不到这个问题的明确答案,基本上我有一个带有EditText字段的活动。软键盘被设置为在清单中可见,因此当活动开始时,键盘是可见的。但是,如果用户离开并使用“后退”按钮返回,键盘将隐藏(我需要它在恢复时可见)。 我已经在我的简历中添加了以下方法,但似乎不起作用? 你知道我遗漏了什么吗

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
inside
onResume
时,它将返回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编辑此项,没有更改,返回活动时键盘隐藏