从SDK 1.5版本以后Android就开放它的IMFInput Method Framework让我们能够开发自己的输入法
一个IMF结构中包含三个主要的部分
input method manager管理各部分的交互它是一个客户端API存在于各个应用程序的context中用来沟通管理所有进程间交互的全局系统服务
input method(IME)实现一个允许用户生成文本的独立交互模块系统绑定一个当前的输入法使其创建和生成决定输入法何时隐藏或者显示它的UI同一时间只能有一个IME运行
client application通过输入法管理器控制输入焦点和IME的状态一次只能有一个客户端使用IME
InputManager
由UI控件View,TextView,EditText等调用用来操作输入法比如打开关闭切换输入法等
它是整个输入法框架IMF结构的核心API处理应用程序和当前输入法的交互可以通过
Context.getSystemService()来获取一个
InputMethodManager的实例
在开发过程中最基础最重要的就是养成阅读API的习惯优秀的程序员要养成把自己关在小黑屋里断绝与外界的联网和联系仅仅靠自己电脑中的开发环境和API文档以及漂亮女仆送来的每天三顿饭写出优秀的程序这个在武侠小说中叫闭关在软件开发中叫Clean Room哈哈
Android的API文档在%SDK_ROOM%/docs/reference/index.htmlInputManager类的位置%SDK_ROOM%/docs/reference/android/view/inputmethod/InputMethodManager.html
InputMethodService
包括输入法内部逻辑键盘布局选词等最终把选出的字符通过commitText提交出来实现输入法的基础就是名为InputMethodService的类比如你要实现一个谷歌输入法就是要extends本类我们接下来要学习的SoftKeyboard Sample也是extends本类InputMethodService类的位置在%SDK_ROOM%/docs/reference /android/inputmethodservice/InputMethodService.html
InputMethodService是InputMethod的一个完整实现你可以再在其基础上扩展和定制它的主要方法如下
onInitializeInterface() 顾名思义它在初始化界面的时候被调用而一般是由于配置文件的更改导致该函数的执行
onBinndInput() 它在另外的客户端和该输入法连接时调用
onStartInput() 非常重要的一个回调它在编辑框中用户已经开始输入的时候调用比如当点击一个输入框我们需要根据这个输入框的信息设置输入法的一些特性这个在Sample中很有体会
onCreateInputView() 返回一个层次性的输入视图而且只是在这个视图第一次显示的时候被调用
onCreateCandidatesView() 同
onCreateInputView()只不过创建的是候选框的视图
onCreateExtractTextView() 比较特殊是在全屏模式下的一个视图
onStartInputView() 在输入视图被显示并且在一个新的输入框中输入已经开始的时候调用
基本上输入法的定制都是围绕在这个类来实现的它主要提供的是一个基本的用户界面框架包括输入视图候选词视图和全屏模式但是这些都是要实现者自己去定制的这里的实现是让所有的元素都放置在了一个单一的由InputMethodService来管理的窗口中它提供了很多的回调API需要我们自己去实现一些默认的设置包括
软键盘输入视图它通常都是被放置在屏幕的下方
候选词视图它通常是放置在输入视图的上面
当我们输入的时候需要改变应用程序的界面来适应这些视图的放置规则比如在Android上面输入编辑框会自动变形腾出一个软键盘的位置来
