`
isiqi
  • 浏览: 16040739 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android输入法02:openwnn源码解析05—用户自定义词库

 
阅读更多

本文是openwnn源码解析的第5篇,主要是介绍openwnn日文输入法的自定义词库功能。

最近看到网上有转载我的文章,但没有注明出处。由于这是系列文章单单转载一两篇读者也不一定看得懂。因此在这里做一个标记,如果看到转载的同学,可以访问我的博客http://blog.csdn.net/xianming01。

用户自定义词库包含UserDictionaryToolsEdit.java,UserDictionaryToolsList.java,UserDictionaryToolsListFocus.java,UserDictionaryToolsListJAJP.java,UserDictionaryToolsEditJAJP.java,ClearLearnDictionaryDialogPreferenceJAJP.java,ClearUserDictionaryDialogPreferenceJAJP.java这些类。

用户可以进入输入法设置界面,其中关于自定义词库部分:


其中日语用户词典与英语用户词典实现起来是一样的。而“学习词典初始化”只是将用户的学习词典清空,也是比较简单的。

1、涉及的类

这里涉及5个类UserDictionaryToolsEdit.java,UserDictionaryToolsList.java,UserDictionaryToolsListFocus.java,UserDictionaryToolsListJAJP.java,UserDictionaryToolsEditJAJP.java.其中最关键的是UserDictionaryToolsEdit.java,UserDictionaryToolsList.java;而UserDictionaryToolsEditJAJP.java,UserDictionaryToolsListJAJP.java则分别继承前面两个类,其重载了几个方法,主要是为了做不同输入法的配置工作。

比如UserDictionaryToolsListJAJP类代码:

从这个代码我们可以看到,这个类只是做了一些适配性的工作,比较简单。

2、UserDictionaryToolsList.java

其界面类似如下:


点击其中的“add”按钮,则弹出如下添加对话框(实际上是个activity):


从上面的这两个界面我们可以看出,这个类有很大一部分代码是用来生成并处理menu的,这一部分代码就不介绍了。

我们以删除对话框中的删除词条功能来介绍一下这里面比较特别的地方:

这里程序的关键点,我加了中文注释,大家看看应该就明白了。

另外,程序中用到了一个小技巧,就是在一个row里面本来有两个TextView的,一个是Read(读音),一个是Candidate(候选词)。正常情况下,我们找到Read还需要去找Candidate。程序使用了UserDictionaryToolsListFocus这个类重定义了TextView。其目的是使得你找到了Read,就可以通过UserDictionaryToolsListFocus类的mPairView找到Candidate,反之亦然。

当然,又个问题差点漏了。大家看这一段事件处理程序:

这里,你如果在用输入法时,按模拟器的那个中间键(他的旁边是前后左右四个键),则会弹出菜单,跟按“menu”键效果是一样的。

3、UserDictionaryToolsEdit.java

这里实际上就是一个编辑框,技术实现上是比较简单的。

不管是添加词条还是修改词条,用的都是这个界面,因此它需要判断当前是添加还是编辑,如果是编辑,需要初始化数据。在onCreate函数中,有如下代码:

这个是根据action的类型来判断是添加还是编辑。

其他的代码都比较简单,应该看得懂。

4、清空词典

这里涉及到清空用户学习词典和用户自定义词典。

以清空用户学习词典为例子,这里是重定义了一个DialogPreference,用户选择确认了以后给OpenWnnJAJP发送一个事件。代码如下:

5、其他

这一部分代码比较简单,所以就做了个简单介绍。

另外,对于事件处理部分,特别是OpenWnnEvent部分没有介绍,等着后续吧。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics