首页 / 操作系统 / Linux / 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() {@Overridepublic void onDismiss(DialogInterface dialog) {// TODO Auto-generated method stubInputMethodManager 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);更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133185.htm