Android SDK sample 之 SoftKeyboard 详解
2010-03-17 16:16:00 来源:WEB开发网setService是设置宿主输入法。
computeHorizontalScrollRange,这个是表示这个VIEW的水平滚动区域,返回的是候选视图的总体宽度。
onMeasure:重载的view类,它主要是在布局阶段被父视图所调用。比如当父视图需要根据其子视图的大小来进行布局时,就需要回调这个函数来看该view的大小。它首先计算自己的期望的宽度,调用 resolveSize来看是否能够得到50px的宽度;然后是计算想要的高度,这里的计算我也没有怎么看懂:文本的字体大小 + 垂直的填充大小 + ( 高亮区域的上边 + 下边的坐标 )。后面括号里面的我就没有看懂,这两个边的值是坐标,这么加是什么意思呢。最后需要注意的是,一定要调用setMeasureDimension来对宽和高进行保存,否则将会有异常出现。
onDraw: 重载它来进行画图的动作。它提供了一块画布,如果为空,则直接调用父类来画。首先需要判断是否有候选词,没有的话就不用绘制。然后需要初始化背景的填充区域,直接view的背景中得到即可。然后就是对于每一个候选词进行绘制了。对于每一个候选词,得到其文本,然后计算其快读,然后再加上两边的空隙。然后就是判断是否选择了当前词:触摸的位置 + 滚动了的位置 如果是在当前词的左边到右边之间,则将高亮区域绘制在画布上面,高亮区域设置的大小即为当前词的大小,并且保存被选词的索引。最重要的还是需要将文本绘制在这个候选词的画布上面,它进行了一个判断,判断哪个才是推荐词。默认情况下是候选词的第一个词,但是它判断第一个词是否是合法的,如果是,则第一个词是候选词,否者第二个词才是候选粗,然后进行绘制。最后还需要绘制一条线,来分割各个候选词。上面提到的总共的宽度在所有的词都绘制出来之后,就能够得到了。最后面还有一个就是需要判断目标滚动是否是当前的,不是就需要滚动过去。
crollToTarget:滚到到目标区域。首选得到当前值,然后加上一个滚动距离,看是否超过了,然后进行调整即可,然后滚动到相应坐标。
setSuggestions:设置候选词。设置之后,就绘制即可。
onTouchEvent:触摸事件产生时调用。这里判断这个时间是什么:1.向上,则没动做;2.移动:如果是向左移动就要手动的选择候选词;3.如果是向上,也需要手动选择候选词。
takeSuggestionAt;选择在坐标x处的词,这个处理的是用户轻轻点击键盘,也就是选择候选词。
removeHighlight: 去除高亮显示。
总而言之,这个类是整个输入法的候选词类,目前还没有彻底的搞懂,需要调试才能搞懂,敬请期待吧。
SoftKeyboard.java:最为重要最为复杂的类,下次分解。
更多精彩
赞助商链接