显示软键盘onResume

时间:2015-02-17 22:09:31

标签: android onresume

无法找到这个答案的明确答案,基本上我有一个带有EditText字段的活动。软键盘设置为在清单中可见,因此键盘在活动开始时可见,但是如果用户导航并使用后退按钮返回键盘被隐藏(我需要在恢复时看到它)。 我已将以下方法添加到我的onResume中,但似乎无法正常工作? 我在这里缺少什么想法?

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

6 个答案:

答案 0 :(得分:4)

试试这个:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分:0)

当您收到clearFocus回拨

时,尝试拨打EditText上的onStop

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您应该不要尝试从片段的 onResume 中显示键盘。使用 InputMethodManager.toggleSoftInput 是一种黑客行为,不适用于 Android 11 (R),而且您无法立即知道键盘是否会显示。

为什么不显示键盘?

当窗口中的活动刚刚启动时(包括从后台返回的活动),该窗口不会立即被标记为获得焦点。当您在 InputMethodManager.showSoftInput 内调用 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);
}