Android SDK sample 之 SoftKeyboard 详解
2010-03-17 16:16:00 来源:WEB开发网LatinKeyboardView.java
这个类是这里面最简单的类了。前面定义的keyboard类通常来说就只是一个概念而已,并不能实例出来一个UI,所以需要借助于一个VIEW类来进行绘制。这个类简单的继承了KeyboardView类,然后很奇怪的重载了一个方法,就是onLongPress函数,这个函数是在有长时间按键事件的时候会调用。它首先判断这个按键是否是CANCELJIAN键,如果是的话就给键盘发送一个OPTIONS键被按下的事件。我的理解好像是屏蔽这个 CANCEL键,然后发送了一个未知的代码的键而已。
Candidateview.java
这个类是候选键的视图类,它直接继承于 View类即可。里面后很多的私有变量,让人很惆怅。
mService:这个是这个candidateView的宿主类,也就是该view是为什么输入法服务的。
mSuggestions:这个是建议。比如说当我们输入一些字母之后输入法希望根据输入来进行联想建议。
mSelectedIndex: 这个是用户选择的词的索引。
mSelectionHighlight:这个是用来描绘选择区域高亮的一个类。
mTypedWordValid;键入的word是否合法正确。
mBgPadding:背景填充区域。
mWordWidth;这个是对于候选词的每个词的宽度。
mWordX:这个是每个候选词的X坐标。有了这两个变量,就能够在屏幕上准确的绘制出该候选键。
mColor*:这几个是定义了各种颜色。
mPaint: 这个是一个绘图类,后面会用到
mVerticalPadding;垂直填充区域。
mTargetScrollX:目标滚动的横坐标,即要将目标滚动到何处。
mTotalWidth:总的宽度
mGestureDetector:这是声明一个手势监测器
然后是各个方法,这个类设计得还是非常合理的。
CandidateView:构造函数,他的参数是context,这个是输入法能够传递给它的,应该是系统的上下文。在这个类里面,主要是对一些变量的初始化工作。首先初始化的是mSelectionHighlight,它本身是一个绘图类,用 android的默认背景来初始化,然后设置了一下这个绘图的一些状态。然后是对整个iew设置背景色,然后初始化各个color值。注意的是,这个地方都是通过系统的资源管理器来进行资源的获取,而不是显示的使用。然后初始化了一个手势检测器,它的Listener重载了一个方法,就是 onScroll,这个类是手势检测器发现有scroll动作的时候触发。在这个函数里,主要是进行滑动的判断,比如首先得到上一次的x坐标,加上本次移动的距离,看是否超过了最大宽度,或者是否越过了最小的最左边。最后目标移动后距离就是sx,然后再将该视图移动到sx。然后就是设置水平滚动中水平边是否需要褪色处理,设置这个候选视图是否需要draw自己,最后设置水平和垂直的滚动条是否需要显示。