最近在公司接到了任务,对手机内的输入法进行修改,以适应安卓手表进行使用。
在Android的这个平台下,有很多源码是值得我们学习的。(由于本人能力有限,有不足的地方还请大家多多指出,互相学习吧)
输入法内代码很多,通过AndroidManifest查看,发现PinyinIME 代码是其中的精华,最主要的功能都是在这里实现的,我简单的说下,因为代码有2000多行,就不放上面了。
第一 首先介绍PinyinIME类当中的各个字段都具体代表什么东西,只要清楚的知道它们是什么以后,我们才能看懂代码。
(1)EnglishInputProcessor
mImEn
;
这个字段是英文处理的一个类(无继承),当当前输入状态为英文输入时则调用这个类处理。
(2)InputModeSwitcher
mInputModeSwitcher
;
用于切换输入法的一个类,可以中文输入和英文输入两种切换
(3)SkbContainer
mSkbConTainer;
这个类继承了
view
,实现了很多监听方法,其实它就是下面的软键盘布局,此布局是画出来的,所以它无法获取焦点,而我们看到它获取焦点其实只是画出来的焦点。
(4) LinearLayout
mFloatingContainer;
在中文输入状态下,这个布局存放的是用户输入的拼音。
(5) ComposingView
mComposingView;
它代表的是上面thjjh的第一个,在代码中有一条这样的语句
mComposingView = (ComposingView)mFloatingContainer.getChildAt(0);说明它代表的是mFloatingContainer中的第一个view。
(6)PopupWindow
mFloatintWindow;
前面我们已经谈到有这样一个viewfile:
那它又是通过什么方式显示出来的呢,
你猜对了。mFloatingContainer这个view就是放在mFloatintWindow,然后通过popupWindow的方式弹出来,给用户一个提示作用,它是否可见有代码控制
(7) PopupTimer
PopHander= new PopupTimer();
它是一个自定义继承Handler的类,里面含有一个线程,它的主要作用就是控制popupwindow的出现和消失。
1.带大家大致来了解一下简单的过程.