无法找到这个答案的明确答案,基本上我有一个带有EditText字段的活动。软键盘设置为在清单中可见,因此键盘在活动开始时可见,但是如果用户导航并使用后退按钮返回键盘被隐藏(我需要在恢复时看到它)。 我已将以下方法添加到我的onResume中,但似乎无法正常工作? 我在这里缺少什么想法?
private void showSoftKeyboard(){
quickListName.requestFocus();
InputMethodManager imm = D(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(quickListName,InputMethodManager.SHOW_IMPLICIT);
}
答案 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);
}