由于项目需要,实现一个小需求:
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());
}
至此,大功告成!