隐藏软键盘在 Android 9.0 Pie 中不起作用
Hiding SoftKeyboard not working in Android 9.0 Pie
我在 android 中有隐藏软键盘的代码:
public void hideKeyboard() {
if (getActivity() != null) {
View view = getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
}
除了 Android 9.0 以外的其他 Android 版本都可以正常工作。在Android9.0中没有效果,软键盘不隐藏
这是因为即使 editText 已获得焦点,getCurrentFocus()
仍会返回 null。因此没有 window 标记,没有它我们无法隐藏键盘。
修复如下:
public void hideKeyboard() {
if (getActivity() != null) {
InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.hideSoftInputFromWindow(getActivity().findViewById(android.R.id.content).getWindowToken(), 0);
}
}
}
我们从 android.R.id.content
获取 window 令牌,而不是从 currentFocused View 获取。因此这很有魅力。
我在 android 中有隐藏软键盘的代码:
public void hideKeyboard() {
if (getActivity() != null) {
View view = getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
}
除了 Android 9.0 以外的其他 Android 版本都可以正常工作。在Android9.0中没有效果,软键盘不隐藏
这是因为即使 editText 已获得焦点,getCurrentFocus()
仍会返回 null。因此没有 window 标记,没有它我们无法隐藏键盘。
修复如下:
public void hideKeyboard() {
if (getActivity() != null) {
InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.hideSoftInputFromWindow(getActivity().findViewById(android.R.id.content).getWindowToken(), 0);
}
}
}
我们从 android.R.id.content
获取 window 令牌,而不是从 currentFocused View 获取。因此这很有魅力。