Android输入法原理和疑云

Android输入法原理和疑云 

开始部分是(zt),后面是在本人实际应用中的体会。

输入法在android中的本质就是一个service,假设用户刚刚启动android,移动焦点首次进入文本编译框时,android便会通知Service开始进行初始化工作。于是便有了以下的一系列动作:

第一个执行的是onCreate方法,该方法继承至Service类,其意义和其他Service是一样的,做了一些非UI方面的初始化,即字符串变量词汇分隔符的初始化;

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

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

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

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

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

 

 下面是本人的一些体会和还需要明确的有疑问的地方:

当用户按下物理键盘的按键时。首先得到的键值的是输入发还是客户端?如果是输入法先得到键值,那么客户端怎么设计都无法得到键值除非在系统设置中关闭输入法,当然有的输入法是不要物理键值的比如:“触宝”。但是“搜狗”是要截获键值的但是它会截流“字母”键,而把“数字”施舍给应用程序或客户端来处理。这是我的感觉。            当然如果是应用程序或客户端先得到键值,那么应该可以通过设定或重写服务程序来屏蔽输入法对键值的截留。我用过设置AndroidManifest.xml

    android:name=".xxxActivity"
  android:windowSoftInputMode="stateHidden">
 

重写dispatchKeyEvent(),onkeydown(),等方法都无法抢在搜狗拼音前得到字母键值。只能得到数字键值,连小数点“.”都不留给我。当然如果关闭搜狗拼音或用触宝则能够得到全部键值。关键是在我的应用里另一个activity要用到用物理键盘的汉字输入,所以搜狗必须要装。本人正在疑云中,希望高人指点。

 

你可能感兴趣的:(Android输入法原理和疑云)