之后要开始android日文输入法的测试,因此现在开始研究android输入法。之前两篇文章已经对android自带的输入法实例softkeyboard的源码进行了解析。这一系列将开始学openwnn的源码。
openwnn是一家日本公司开发的开源输入法框架,涉及中文、日文、韩文。目前已经加入到了android源码之中。因此你打开一个模拟器时,会发现其中有一个japanese ime的输入法,其服务名为openwnn,这个就是openwnn的日文输入法。
网上流传的openwnn源码后端都没有处理(将c转为so文件),所以都是不可直接生成可运行apk的。我编译了下C代码后的源码下载地址为:http://download.csdn.net/detail/xianming01/4308456
1、日文输入
本文章主要以日文输入法为主。为了方便大家阅读,先对日文输入法做一个简单的介绍:
- 日文输入法分为罗马音输入法(类似中文拼音)和假名输入法(类似中文五笔、)。比如,你要输入”可愛“,则用罗马音输入,需要输入”kawai“,然后在候选词中选择”可愛“;若使用假名输入,则需要输入”かわい“,在候选中选择”可愛“。
- 日文由平假名、片假名(分全角片假名和半角片甲名)和汉字组成。通常学日语的人会说到50音图,就是日语50个平假名(与之对应有50个片假名)的读音。其中平假名是由汉字演化而来的,类似于日文的拼音,比如”可愛“的日文读音就是”かわい“。片假名是由于外来语的入侵,原来平假名无法表达所有的外文内容而设计的。
这里,如果你读到ComposingText.java这个类时,其中会涉及到三个输入层:第一层为原始输入,比如输入的按键;第二层为假名层;第三层为最终显示结果,一般为汉字与假名的混合体。以前面那个例子,在罗马音输入法模式下,第一层为”kawai“,第二层为”かわい“,第三层为”可愛“。若你不懂日文的一些基本特点,这一个地方有可能看不懂。
2、输入流程
2.1 android输入法输入流程
现在我们开始介绍输入流程。从前面的文章对softkeyboard的分析(若你对输入法不了解,请看前两篇介绍softkeyboard的文章,否则后面的内容很难看懂),我们可以知道,输入法包括四个部分:Keyboard,KeyboardView,CandidateView,InputMethodService。其中InputMethodService是前面三者的使用者,同时也设定了输入流程。android输入法的调用流程如下:
输入法在Android中的本质就是一个Service,假设用户刚刚启动Android,用户移动焦点首次进入文本编辑框时,Android便会通知Service开始进行初始化工作。于是便有了如图中的一系列动作。
追根溯源,onCreate方法继承至Service类,其意义和其他Service的是一样的。Sample在这里,做了一些非UI方面的初始化,即字符串变量词汇分隔符的初始化。
接下来执行onInitializeInterface,这里是进行UI初始化的地方,创建以后和配置修改以后,都会调用这个方法。Sample在这里对Keyboard进行了初始化,从XML文件中读取软键盘信息,封装进Keyboard对象。
第三个执行的就是onStartInput方法,在这里,我们被绑定到了客户端,接收所有关于编辑对象的详细信息。
第四个执行的方法是onCreateInputView,在用户输入的区域要显示时,这个方法由框架调用,输入法首次显示时,或者配置信息改变时,该方法就会被执行。在该方法中,对inputview进行初始化:读取布局文件信息,设置onKeyboardActionListener,并初始设置 keyboard。
第五个方法是onCreateCandidatesView,在要显示候选词汇的视图时,由框架调用。和onCreateInputView类似。在这个方式中,对candidateview 进行初始化。
第六个方法,也是最后一个方法,即onStartInputView,正是在这个方法中,将inputview和当前keyboard重新关联起来。
在上面的六个方法中,onCreateInputView和onCreateCandidatesView两个方法只有在初始化时才会执行一次,除非有配置信息发生改变。那么究竟什么是配置信息发生改变呢?在看InputMethodService的API文档时,可以看到有一个方法onConfigurationChanged,根据文档解释,这个方法主要负责配置更改的情况。
2.2 相关类分析
openwnn中对上面这些流程的控制来自于两个类OpenWnn.java和OpenWnnJAJP.java,其中前者是通用接口,后者是对日文输入法的定制版。我们看一下第一个类OpenWnn.java。
其中的变量包括如下部分:
这些变量的作用如文字说明。其中跟我们需要介绍相关的是InputViewManager和CandidatesViewManager,前者负责维护Keyboard和KeyboardView,后者负责维护CandidateView。
从这个类的方法中我们可以到其中主要是输入法生命周期方法以及输入法处理。
下面我们来看看OpenWnnJAJP.java,其中的公用方法为:
从这些方法中我们可以看到,这些方法主要也是应用输入法的处理流程中。有需要的同学可以按照第一张输入法流程图对应的类来看看相关的函数代码,就可以对其输入法流程有比较深刻的认识。
分享到:
相关推荐
日文,中文,英文。...OpenWnn for Android is a IME(Input Method Editor) package which works on Android's IMF(Input Method Framework). This version contains Japanese, Chinese and English IME.
安卓(Android)系统本身的确没有原生的日文输入法,但是谷歌公司在安卓SDK中包含了日本omronsoft软件公司的开源输入法OpenWnn。OpenWnn是omronsoft公司的手机输入法iWnn IME的精简开源版本。OpenWnn在官方各个版本...
对其中c代码进行编译,因此利用此源码可以直接编译出可运行apk文件。
Android输入法框架源码,可以很快上手开发
OpenWnn可以编译运行的源码,学习安卓输入法开发的好素材。
OpenWnn安卓输入法完整源码,修复了网络上其他版本中BUG,导入ECLIPSE 就可以直接运行到安卓设备,如有任何意见建议请留言
前一段时间需要开发一个Android上的输入法,收集了一些源码,仅供参考
可能对研究输入法的朋友有些... OpenWnn for Android is a IME(Input Method Editor) package which works on Android's IMF(Input Method Framework). This version contains Japanese, Chinese and English IME.
其他 openwnn很多编译不通过,要么是.so文件没编译好,要么代码不支持。这个是能编译通过,部署成功的。so文件也有的
这是一款不错的开源输入法应用源码,该应用不但可以支持输入中文之外,还可以输入英文,日语的功能,而且还带有多种风格的输入法可以提供给用户切换等,功能非常强大,是一款非常难得的android输入法应用。...
Android9.0内日文输入法OpenWnn,源码,已编译验证过,主要修改64位机器,SO库放置位置,以及在9.0失效的api替换,可在9.0源码内直接替换。
可以运行的openwnn开源输入法代码,加入了从串口接收数据的功能
android 输入法 openwnn eclipse版本,希望可以帮助到输入法开发的初学者 openwnn是一个完整的输入法,大家都可以基于这个版本来自己修改,修改称自己想要的输入法
一款日本人开发的中文、英文、日文安卓输入法,底层是c语言,工程直接用Android studio导入(Import project(Gradle。。。)),可以直接编译生成apk。
安桌手机手写输入法.apk
一款Android手机上的输入法。含有中文输入法。
例如:Android键盘 Package Summary(包装总结) a. com.android.inputmethod.latin(来源网站) d. Restart(重启) b. (No Application Class)(无应用类型) c. (NO Label)(无标签) e. system(系统) f. process...
The OpenWnn engine class for English IME.