Android 软键盘的弹出及关闭
2018-06-01 本文已影响0人
Batashi
一、弹出:
方法1(推荐,此种方式可以自动弹出,无需延迟):
getWindow().setSoftInputMode(WindowManager.LayoutParams
.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
方法2(此种方式需要延迟一段时间,等UI加载完毕之后方能生效。但这个加载时间因不同手机而无法统一。你的手机好点,可能100毫秒就加载完毕,我的手机差点,可能需要1000毫秒才能加载完成。因此无法保证一定能自动弹出软键盘):
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool
(1);
scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
InputMethodManager inputManager =
(InputMethodManager) mContext.getSystemService
(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mNo1EdtTxt, 0);
}
}, 700, TimeUnit.MILLISECONDS);
方法3(推荐。原理同上,只是不需要自己写死延迟时间。因为不同手机UI加载完毕所需时间可能不一样,这种方法比较保险,总是在UI加载完毕之后弹出,灵活性较好。而方法2延迟时间是写死的700毫秒,有可能在一些性能比较差的手机,700毫秒内UI还无法加载完毕,因此无法自动弹出软键盘。也有可能因为手机性能太好,100毫秒就加载完UI,而后面的600毫秒就算白等了,灵活性、可靠性及用户体验都很差):
getWindow().getDecorView().post(() -> {
InputMethodManager inputManager =
(InputMethodManager) mContext.getSystemService(
Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mNo1EdtTxt, 0);
});
二、关闭(如果是在Dialog中弹出的,则一定要在Dialog关闭前关闭软键盘;如果是在Activity中弹出的,则一定要在finish之前关闭软键盘):
方法1:
/**
* 隐藏软键盘(无输入框或者说无法获取输入框。比如,微信支付时处于未登录状态,此时输入框
* 是微信的,返回再隐藏键盘)
* @param context
*/
public static void hideSoftKeyboard(@NonNull Activity context)
{
View view = context.getWindow().peekDecorView();
if (view != null) {
InputMethodManager inputmanger = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
方法2(推荐):
/**
* 隐藏软键盘(有输入框)
* @param context
* @param mEditText
*/
public static void hideSoftKeyboard(@NonNull Context context,
@NonNull EditText mEditText)
{
InputMethodManager inputmanger = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputmanger.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
}