Android场景:自定义了一个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);(责任编辑:好模板) |