Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162299
  • 博文数量: 95
  • 博客积分: 1998
  • 博客等级: 大尉
  • 技术积分: 531
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-07 10:55
文章分类
文章存档

2015年(5)

2012年(4)

2011年(2)

2009年(84)

我的朋友

分类: LINUX

2009-06-18 10:54:31

Android SDK中提供软键盘输入法的示例,希望通过对它的分析,可以掌握如何从零开始实现输入法。以下内容拟采用UML中Sequence Diagram(时序图)的形式,剖析其处理流程。init

init

需要特别说明的是,由于SoftKeyboard这个名称,会使人误解其是KeyBoard的子类,因此特意重构名称为SampleInputMethodService。

万事万物都要回答这样一个问题:从哪里来到哪里去?针对输入法而言,这个问题就是:输入法如何初始化。输入法在Android中的本质就是一个 Service,假设用户刚刚启动Android,用户移动焦点首次进入文本编辑框时,Android便会通知Service开始进行初始化工作。于是便 有了如图中的一系列动作。

追根溯源,onCreate方法继承至Service类,其意义和其他Service的是一样的。示例在这里,做了一些非UI方面的初始化,即字符串变量词汇分隔符的初始化。

接下来执行onInitializeInterface,这里是进行UI初始化的地方,创建以后和配置修改以后,都会调用这个方法。示例在这里对Keyboard进行了初始化,从XML文件中读取软键盘信息,封装进Keyboard对象。

第三个执行的就是onStartInput方法,在这里,我们被绑定到了客户端,接收所有关于编辑对象的详细信息。

第四个执行的方法是onCreateInputView,在用户输入的区域要显示时,这个方法由框架调用,输入法首次显示时,或者配置信息改变时, 该方法就会被执行。在该方法中,对inputview进行初始化:读取布局文件信息,设置onKeyboardActionListener,并初始设置 keyboard。

第五个方法是onCreateCandidatesView,在要显示候选词汇的视图时,由框架调用。和onCreateInputView类似。在这个方式中,对candidateview 进行初始化。

第六个方法,也是最后一个方法,即onStartInputView,正是在这个方法中,将inputview和当前keyboard重新关联起来。

在上面的六个方法中,onCreateInputView和onCreateCandidatesView两个方法只有在初始化时才会执行一次,除 非有配置信息发生改变。那么究竟什么是配置信息发生改变呢?在看InputMethodService的API文档时,可以看到有一个方法 onConfigurationChanged,根据文档解释,这个方法主要负责配置更改的情况。在示例中,其没有override这个方法,但是在 android源码包中的PinyinIME中,有使用这个方法。

阅读(1748) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~