当焦点在SearchView中时,输入法不能处理KEYCODE_BACK按键的原因
来源:互联网 发布:复旦大数据学院研究生 编辑:程序博客网 时间:2024/05/16 07:19
公司自主研发的终端产品形态是带有物理按键的T9数字键盘的,终端需要可以通过键盘来输入字符(中文、英文、数字等),当然同时也是可以删除的。
软件中的某个模块,使用了SearchView这个控件,当输入字符之后,用户可以通过back按键删除字符,但是在实现的过程中发现输入法不能获取KEYCODE_BACK按键。
翻了下SearchView的源码,发现SearchView$SearchAutoComplete重写了onKeyPreIme并处理了KEYCODE_BACK按键,导致输入法不能正常获取。
代码如下:
public static class SearchAutoComplete extends AutoCompleteTextView { ... @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // special case for the back key, we do not even try to send it // to the drop down list but instead, consume it immediately if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { KeyEvent.DispatcherState state = getKeyDispatcherState(); if (state != null) { state.startTracking(event, this); } return true; } else if (event.getAction() == KeyEvent.ACTION_UP) { KeyEvent.DispatcherState state = getKeyDispatcherState(); if (state != null) { state.handleUpEvent(event); } if (event.isTracking() && !event.isCanceled()) { mSearchView.clearFocus(); mSearchView.setImeVisibility(false); return true; } } } return super.onKeyPreIme(keyCode, event); } }
onKeyPreIme表示,在keyevent流入输入法之前,view进行一次拦截,当down和up都return true时,表示此keyevent将不被流向输入法。
当然也可以重写View#dispatchKeyEventPreIme。
0 0
- 当焦点在SearchView中时,输入法不能处理KEYCODE_BACK按键的原因
- wince sip输入法不能获取输入焦点的原因
- 解决文本框在updatepanel中得到焦点,输入法不能切换到中文的问题
- 当控件成为焦点时,控制输入法
- Android输入法框架中按键消息的处理流程
- 在有TabHost控件的页面,解决onKeyDown方法不能拦截KeyEvent.KEYCODE_BACK事件
- 在有TabHost控件的页面,解决onKeyDown方法不能拦截KeyEvent.KEYCODE_BACK事件
- 当手机在Eclipse中不能识别时的操作
- 中断处理中不能睡眠的原因
- 中断处理中不能睡眠的原因
- SearchView中onQueryTextSubmit()执行两次的原因和解决办法
- android KEYCODE_BACK监听处理
- 如何实现当Form中某textBox成为焦点时,自动打开某输入法(比如说五笔字型)!
- Android TV中按键事件和焦点处理总结
- 移除SearchView焦点的解决方法
- 中断处理程序中不能出现睡眠代码的原因
- 在tableview中选种一行,当失去焦点的时候选种行的颜色自动消失
- 在tableview中选种一行,当失去焦点的时候选种行的颜色自动消失
- 基于ZooKeeper的分布式配置管理系统
- 纯新手本地搭建ECShop环境
- 多台机器下使用同一个IOS证书
- Window 、Linux python 环境下安装Selenium2
- 浅析DNS解析过程
- 当焦点在SearchView中时,输入法不能处理KEYCODE_BACK按键的原因
- 最近在做微信支付
- 批量动态生成Button事件
- 互联网金融高并发方案
- SQLMAP自动注入(二)-REQUEST
- mongoDB的基础使用
- Ubuntu 下安装 Android Studio
- 阿里云服务器yum源更新问题
- RxJava运用技巧-RxAndroid部分源码解读