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());
    }

至此,大功告成!

你可能感兴趣的:(Android疑难杂症之Dialog消失,关闭输入法)