遇到一个问题, 情况是这样的:
一个Activity,上面只有一个录音按钮。
一个popupWindow,点击录音按钮,发出命令,弹出popupwindow。
popwindow里面有一个EditText,点击文本框,就要弹出软键盘,进行手写输入。点击喇叭,就可以切换到语音输入。从手写输入到语音录入切换的时候不能
关闭popupwindow,否则前面输入的内容就没了。
现在有一个矛盾:
A、要想在点击EditText的时候能弹出软键盘,就得设置popupwinodw.setFocusable(true);
B、要在点击popupwindow外面的喇叭button时,不让popupwinodw消失,就得设置popupwindow.setFocusable(false)
这两上水火不容。
后来千辛万苦找到了一种方法:
第一步:popupwindow.setFocusable(false);
第二步:手动给EditText设置onTouch监听,弹出软键盘:
InputMethodManager m = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
但又悲剧的发现,这弹出的软键盘出现在popupwinow的底层,被popupwindow遮住了。
各位大神,看懂了我表达的意思没?如果理会了,望支招啊!!!
一句话概括,就是我想在该popupwindow.setFocusable(false)的情况下调出系统键盘,并且能实现输入
思路转移:后来我通过一种方解决了,就是动态设置popupwindow.setFocusable的属性,当检测键盘没有弹出的时候,代表是要语音输入,默认状态,focusable状态为false,点击录音按钮录音,popupwindow也不会消失;同时如果点击文本框时,表示要进行文字输入,马上要setFocusable = true;由于已经设置成了true,则键盘会弹出。当键盘弹出了的时候,就设置setFocusable为false,下次再点击popupwindow外面的录音按钮时,popupwindow也不会消失不见啦!!
最终解决方案:
这样,问题的核心就转移到怎样检测键盘是否弹出了。研究出了一种方法,就是通过重些onLayout,
来检测软键盘是否弹出。原理是软键盘的弹出会影响到onLayout的布局,所以检测高度就能知道键盘是否弹出了。
代码下载地址:http://download.csdn.net/detail/nnmmbb/5133743