android 隐藏输入法时自动关闭弹窗,Android疑难杂症之Dialog消失,关闭输入法

由于项目需要,实现一个小需求:

1) 有一个功能是弹出一个输入框,自动弹出输入法

2)关闭时 ,自动隐藏输入法

感觉很简单的一个功能,页面做完后发现,输入法没有弹出来

怎么办?

这个很简单,手动打开输入法好了,关闭页面也可以手动关闭

下面是开启输入法 和 关闭输入法的方法

public static void openKeybord(EditText editText, Context context) {

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

imm.showSoftInput(editText, InputMethodManager.RESULT_SHOWN);

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

}

/**

* 避免 输入框为空,延迟后也会提高用户体验

* @param mEditText

* @param mContext

*/

public static void openKeybordDelay(final EditText mEditText, final Context mContext) {

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

openKeybord(mEditText, mContext);

}

}, 100);

}

/**

* 关闭软键盘

*

* @param editText

* @param context

*/

public static void closeKeybord(EditText editText, Context context) {

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

}

本以为功能搞定,没想到的是,关闭输入法,无论在onDissmissLisener回调接口还是在onCancelListener中调用都无法隐藏输入法。

在经过查找资料发现是Dialog已经消失,所有无法取消输入法,所以解决方法:只需要在取消Dialog之前调用就好了

@Override

public void dismiss() {

//避免闪屏 提高用户体验

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

InputDialog.super.dismiss();

}

},500);

KeyBoardHelper.closeKeybord(editText,getContext());

}

至此,大功告成!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值