Android基础之输入法开发
来源:互联网 发布:淘宝皇冠店铺网址导航 编辑:程序博客网 时间:2024/06/02 12:52
输入法中核心类是InputMethodService
其次就是:CandidateView 和KeyboardView
CandidateView为候选窗口,InputMethodService在启动过程中会调用接口public View onCreateCandidatesView() ,在这个方法中把CandidateView对象返回后,InputMethodService内部会将其布局到相应的位置。
在android中没有CandidateView父类,得自己从头写,一般的做法是:
通过方法public void setService(InputMethodService listener) 将Service类传进来,然后再通过public void setSuggestions(List<String> suggestions…) 方法将候选词列表传递过来,CandidateView将其显示到界面上,用户选择结束后,再通过service的方法pickSuggestionManually(mSelectedIndex) ,将选择的候选词在列表中的序号传递回去。至此, CandidateView 就完成了它神圣的使命。
android中KeyboardView有一个通用类,继承它可以通过简单的配置文件就显示出很专业软键盘。在源代码中,它绝大部分代码都在做绘制工作和事件处理,不过就其本质功能来说是相当地简单,用户摁下软键盘上的某个键后,它把这个键所代表的值传递给InputMethodService类也完成了它的使命。InputMethodService在public View onCreateInputView() 方法中获得该View。
InputMethodService就是输入法的核心了,该类是一个Service,跟其它默默无闻的Service不同的是,它是一个带有View的Service。其内部有几个个重要的接口:
InputMethodImpl
InputMethodSessionImpl
InputConnection
InputMethodService通过这几个个类跟系统和输入框进行交互的。
输入框从InputMethodService获取信息是通过InputConnection来实现的, 在启动输入法时,InputConnection由客户端控件创建,并传递给输入法应用,由输入法应用调用,进行信息反馈。
InputMethod接口定义了一套操纵输入法应用的方法。如,bindInput, hideInput, startInput等。为了系统安全,这类接口只有系统可以访问,客户端控件无法直接调用这个接口。所有的输入法应用都需要客户端控件具有 BIND_INPUT_METHOD权限,作为系统的安全机制,否则将无法与输入法服务交互。
InputMethodSession作为InputMethod的辅助接口类,为客户端控件开放了可直接调用的函数接口。包括向输入法应用分发键盘事件,更新光标位置,更新编辑区域内选择的问题信息等。客户端控件通过IIputMethodSession对于输入法应用的交互是单向的,即只能向输入法应用传递信息,无法获取信息。
其中最实用的是InputConnection的
public boolean commitText(CharSequence text, int newCursorPosition) 。
通过KeyboardView和CandidateView, InputMethodService类已经获得了想要的内容,然后通过这个方法把值传递给输入框。
- Android基础之输入法开发
- Android开发之输入法详解
- Android之输入法开发简单说明
- Android输入法开发之API浅析
- Android输入法开发之Android SDK Sample—SoftKeyboard
- Android输入法开发
- Android输入法开发
- [Android] 输入法的开发
- android 输入法开发
- Android 开发 隐藏输入法
- Android输入法开发
- android输入法开发
- [Android] 输入法的开发
- android 之输入法
- android 之输入法
- android 之输入法
- android 之输入法
- Android-NDK开发之基础-
- 实现实现基于Android的英文电子词典修改原先bug
- 三分钟教你学Git (四)之紧急救助
- 顶部定时关闭层JS代码
- 集合框架__【Set集合】【HashSet】【TreeSet】
- 关于一个数加另一个数的绝对值
- Android基础之输入法开发
- 20140613
- Java-集合框架(下)
- Dead Aim nicht die FIFA 14 Coins kaufen
- 如何测试Action
- 关于LINUX C中函数strtok使用要点
- jquery插件获得调用者id实验
- 三招教你用VLC Player 通过RTSP over Http 播放 live555 mediasever 来的流媒体
- Hibernate进阶之ID主键生成策略