Android Dialog 隐藏键盘问题

场景:自定义了一个Dialog,Dialog里面包含EditText,当输入时手机键盘会弹出,但是点击空白区域Dialog关闭时键盘不会自动隐藏。

之前也自定义过一个Dialog,里面也是包含EditText,不过因为这个Dialog占地方比较大,当弹出键盘时已经没有空白区域可以点击,所以在Dialog上添加了一个关闭按钮,然后调用下面方法:

public static void hideSoftKeyboard(Activity context, View view) {
        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

这样Dialog关闭后键盘都可以自动收起,但是最近做的一个Dialog,当弹出键盘后点击空白区域Dialog关闭了但是键盘还是没有收起!!! 通过不断的尝试发现了另外一个方法:

首先我们监听Dialog的关闭方法,然后调用收起键盘的方法。

this.setOnDismissListener(new OnDismissListener() {

            @Override
            public void onDismiss(DialogInterface dialog) {
                // TODO Auto-generated method stub
                InputMethodManager inputMgr = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMgr.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
            }
        });

这样当点击空白区域关闭Dialog的时候,键盘也可以收起了。不过这个方法有个弊端就是如果键盘没有弹出的话就会弹出键盘。。。(好坑), 而且判断键盘是否弹出的方法inputMgr.isActive()会一直返回true。。最后没办法只能通过重写父布局,这我是重写的RelativeLayout,通过onSizeChanged(int w, int h, int oldw, int oldh)和onLayout(boolean changed, int l, int t, int r, int b)方法来判断键盘是否弹出,最后调用上面的方法解决。

这里再提个自定义Dialog需要注意的问题:当我们给Dialog自定义布局的时候会发现即使我们没有设置背景,会发现Dialog的背景为白色,一般我们需要的是透明。这里在自定义的时候需要在代码里加入:

        Window dialogWindow = getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        dialogWindow.setBackgroundDrawableResource(android.R.color.transparent);
        DisplayMetrics d = context.getResources().getDisplayMetrics();
        lp.width = (int) (d.widthPixels * 0.6);
        dialogWindow.setAttributes(lp);

你可能感兴趣的:(学习经验)