阅读:5825回复:2

获取当前焦点View的问题

楼主#
更多 发布于:2019-09-27 19:57
用户的需求一句话也说不清,我就说我的需求吧,我想在PhoneWindowManager.javainterceptKeyBeforeDispatching() 方法里面,监听一组keyCode, 获取当前View, 查找焦点view 判断如果是EditText就弹出 软键盘,我的代码是这样的:

Log.d(TAG,"keyCode = " + keyCode);
 if (keyCode >= KeyEvent.KEYCODE_AA && keyCode <= KeyEvent.KEYCODE_ZZ) {
         Log.d("zhao","-----keyCode :  " + keyCode);
         InputMethodManager imm = InputMethodManager.peekInstance();
         PhoneWindow phoneWindow = new PhoneWindow(mContext);
         View rootview = phoneWindow.getDecorView();
         View focusView = rootview.findFocus();
         Log.d("zhao","======focusView : " + focusView.getId());
         if(focusView instanceof EditText){
             Log.d("zhao","======focusView ======= " + focusView.getId());
        if (imm != null) {
             Log.d("zhao","======showSoftInput : " + focusView.getId());
             imm.showSoftInput(focusView, 0);
         }
      }
 }
看打印信息是:Log.d("zhao","======focusView : " + focusView.getId()); 这一行报错了,focusView  = null

不知道是否可以这这个里面获取焦点View
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
沙发#
发布于:2019-09-28 09:57
通过在PhoneWindowmanger.java文件中使用ams的方法获取栈顶activity,然后通过activity的getwindow().getDecorView();
应该可以实现。
If you have nothing to lose, then you can do anything.
板凳#
发布于:2019-09-28 10:00
研究了一下,我发现这interceptKeyBeforeDispatching里面是按键事件分发的起点,这个时候还没有分发到具体的View , 我改为在TextView 的onKeyDown()里面执行imm.showSoftInput(this, 0); 这样可以在监听到特定的按键后,唤出软键盘。虽然这样还是会有一些问题,但是还好,可以说服客户接受
为什么我想要在
interceptKeyBeforeDispatching()里面执行showSoftInput(),后面我再整理一下,这个客户的问题
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
游客

返回顶部