现在的位置: 首页 > 综合 > 正文

PopupWindow消失时实在自动隐藏 软键盘

2014年01月30日 ⁄ 综合 ⁄ 共 1572字 ⁄ 字号 评论关闭

项目需求:在用户点击关闭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"),自动完成的。



抱歉!评论已关闭.