以编程方式关闭键盘不适用于 Android 10
Closing keyboard programmatically not working on Android 10
我已经在我的 API 19 真实设备和 API 23 模拟器上测试过,这个方法工作正常:
if(activity != null){
View view = activity.getCurrentFocus();
if (view != null){
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputManager != null){
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
但是,它不适用于我的 Pixel 4a (android 10) 真实设备。有谁知道如何在 android 10 上以编程方式关闭键盘?
试试下面的静态方法
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
View currentFocus = activity.getCurrentFocus();
if (inputMethodManager != null) {
IBinder windowToken = activity.getWindow().getDecorView().getRootView().getWindowToken();
inputMethodManager.hideSoftInputFromWindow(windowToken, 0);
inputMethodManager.hideSoftInputFromWindow(windowToken, InputMethodManager.HIDE_NOT_ALWAYS);
if (currentFocus != null) {
inputMethodManager.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
}
}
}
根据您所在的位置,您可以使用以下方法之一:
boolean hideSuccess = KeyboardUtils.hideKeyboard(activity);
// or
boolean hideSuccess = KeyboardUtils.hideKeyboard(fragment);
// or
boolean hideSuccess = KeyboardUtils.hideKeyboard(editText); // It's recommended
KeyboardUtils.java
import android.app.Activity;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import androidx.fragment.app.Fragment;
/**
* @author aminography
*/
public class KeyboardUtils {
public static boolean hideKeyboard(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm != null) {
View focus = activity.getCurrentFocus();
if (focus == null) focus = new View(activity);
return imm.hideSoftInputFromWindow(focus.getWindowToken(), 0);
} else {
return false;
}
}
public static boolean hideKeyboard(Fragment fragment) {
InputMethodManager imm = (InputMethodManager) fragment.requireContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm != null) {
View focus = fragment.requireActivity().getCurrentFocus();
if (focus == null) focus = new View(fragment.requireContext());
return imm.hideSoftInputFromWindow(focus.getWindowToken(), 0);
} else {
return false;
}
}
public static boolean hideKeyboard(EditText editText) {
InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm != null) {
return imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
} else {
return false;
}
}
}
在清单中添加任务权限。
<uses-permission android:name="android.permission.GET_TASKS"/>
我已经在我的 API 19 真实设备和 API 23 模拟器上测试过,这个方法工作正常:
if(activity != null){
View view = activity.getCurrentFocus();
if (view != null){
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputManager != null){
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
但是,它不适用于我的 Pixel 4a (android 10) 真实设备。有谁知道如何在 android 10 上以编程方式关闭键盘?
试试下面的静态方法
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
View currentFocus = activity.getCurrentFocus();
if (inputMethodManager != null) {
IBinder windowToken = activity.getWindow().getDecorView().getRootView().getWindowToken();
inputMethodManager.hideSoftInputFromWindow(windowToken, 0);
inputMethodManager.hideSoftInputFromWindow(windowToken, InputMethodManager.HIDE_NOT_ALWAYS);
if (currentFocus != null) {
inputMethodManager.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
}
}
}
根据您所在的位置,您可以使用以下方法之一:
boolean hideSuccess = KeyboardUtils.hideKeyboard(activity);
// or
boolean hideSuccess = KeyboardUtils.hideKeyboard(fragment);
// or
boolean hideSuccess = KeyboardUtils.hideKeyboard(editText); // It's recommended
KeyboardUtils.java
import android.app.Activity;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import androidx.fragment.app.Fragment;
/**
* @author aminography
*/
public class KeyboardUtils {
public static boolean hideKeyboard(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm != null) {
View focus = activity.getCurrentFocus();
if (focus == null) focus = new View(activity);
return imm.hideSoftInputFromWindow(focus.getWindowToken(), 0);
} else {
return false;
}
}
public static boolean hideKeyboard(Fragment fragment) {
InputMethodManager imm = (InputMethodManager) fragment.requireContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm != null) {
View focus = fragment.requireActivity().getCurrentFocus();
if (focus == null) focus = new View(fragment.requireContext());
return imm.hideSoftInputFromWindow(focus.getWindowToken(), 0);
} else {
return false;
}
}
public static boolean hideKeyboard(EditText editText) {
InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm != null) {
return imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
} else {
return false;
}
}
}
在清单中添加任务权限。
<uses-permission android:name="android.permission.GET_TASKS"/>