项目需求:在用户点击关闭popup窗口时,自动把已经弹出的软键盘隐藏。
void function(){
mPopupWindow.dismiss();
hideSoftKeyboard();
}
private void hideSoftKeyboard(){
System.out.println("SA: come here to hidden soft keyboard... ");
// hidden soft keyboard....
final View vv = getWindow().peekDecorView();
if (vv != null && vv.getWindowToken() != null) {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(vv.getWindowToken(), 0);
}
}
上面的方法没有用了,根本不能使软键盘消失。
测试了一下,是因为,我在manifest.xml当中设置了: android:windowSoftInputMode="adjustPan|stateHidden"
至于为什么要这样设置,可参考以前的一篇blog : http://blog.csdn.net/woshicaixianfeng/article/details/7073318
现在相互矛盾了:
如果 我们
在AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize" ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点当我们设置为“adjustResize”时,我们的界面不要设置为全屏模式,否则设置了这个属性也不会有什么效果。
而当我们设置android: windowSoftInputMode = "adjustPan"时,主窗口就不会调用onSizeChanged方法,界面的一部分就会被软键盘覆盖住,就不会被挤到软键盘之上了。
"stateHidden"
当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。
那针对,项目的实际需求:adjustPan 这是一定需要的,所以,暂时的解决方法:android:windowSoftInputMode="adjustPan" 用一个设置就可以,这样软键盘在弹起的时候,即不会把原来的布局顶上去,在poupWindow消失的时候,又可以把软键盘隐藏掉。
用真机测试是完全可以的,达到要求,可是用模拟器就是达不到效果,在模拟器中,你只有设置成android:windowSoftInputMode="adjustPan|stateHidden"这样,软键盘才不会把布局给顶上去。在模拟器当中,listView没有滚动到底部的时候,不会把布局顶上,当滚动到底部时,会顶上。不知道什么原因,反正也不是os版本的问题,我试过2.2,
2.3
真机用的是htc g7 miui 2.3.5
还有要特别注意:把我们主动隐藏软键盘的代码去除,软键盘也能自动消失,只要poupWindow一消失,软键盘也就会消失了。
这跟 mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 没有关系,
应该是系统根据你的设置(android:windowSoftInputMode="adjustPan"),自动完成的。