[置顶] popupwindow 中 EditText与软键盘的问题与探索

遇到一个问题, 情况是这样的:

一个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


                    

你可能感兴趣的:([置顶] popupwindow 中 EditText与软键盘的问题与探索)