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);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值