布局、绘制-LatinIME输入法的一些总结-by小雨
废话就不多说了,开始。。。
1.关于入输法的一些置设要重文件
res/xml/method.xml
在该文件中在前面的客博http://blog.csdn.net/holdrise/article/details/8792294中明说可以加添键盘入输言语。
另外,还有其他的一些要重的置设:
入输法的置设在res/xml/method.xml的<input-method>签标中,要主置设两个属性:
android:settingsActivity,入输法的置设序程进口。
android:isDefault,这个入输法是否是系统的默许入输法。
2.adb push与adb install的区分
另外,如果入输法的apk直接push到/system/app/上面的话,算是系统入输法,如果是以第三方序程的式方安装到/data/app/上面的话,算是第三方入输法,两个入输法前目来看,最大的不同在于,用使第三方入输法时必须在置设->言语和键盘当中手工启动。
3.键盘的各种布局文件
最基本的字母布局由res/xml/上面的kbd_qwerty.xml,kbd_qwerty_black.xml定义,其它的还有号符布局,数字布局等也都在这个文件夹上面。当户用停止操纵时,序程就会在这些布局之间回来切换。如果想加添不同言语的入输键盘,也是在这个目录下加添kbd的xml文件。
对这些布局的析解由Keyboard(位于framework中)以及它的子类LatinIME(位于Latin入输法的码源中)起一成完,涉及到的要主法方有:
1、loadKeyboard:析解布局文件
2、LatinKeyboard.createKeyFromXml,Keyboard.createKeyFromXml:从XML文件创建一个按键。
3、getDimensionOrFraction:获得某一个属性的值。这个属性值的格式必须规定为Dimen(dip,px,sp,in等)或者Fraction(百分比)的。
4、LatinKeyboardBase.onBufferDraw:把有所的Key绘制在一张Bitmap上,再由继承自ViewonDraw法方把这张Bitmap渲染到onDraw传递过去的Canvas上。
4.绘制key的大概解理
绘制Key的时候,要主绘制两个货色,label和icon。对于a,b,c,1,2,&等这样可以用字符来表现的键,就绘制它的label属性。对于Shift,Alt等这样法无用字符表现的键,就绘制它的icon属性。
另外,大部分Key只绘制icon或label中的一个。而少部分Key,两个都绘制。比如qwertyuiop这几个Key,还会在Key的右上方有一个小的数字,这些小数字每个都是一个icon,存放在LatinKeyboard的mNumberHintIcons组数中。而qwertyuiop这几个Key是一组较比殊特的Key,它们会在LatinKeyboard中有一个引用份备:mNumberHintKeys。每次户用按Shift来新更键盘布局时,除了会新更这几个Key的label以外,都市调用updateNumberHintKeys法方把它们的icon也赋值。
5.入输法示显问题
LatinIME布局乱混,打开这个入输法时,个整入输法面界被挤在屏幕下方一个高度很小的矩形范围内。入输法的布局的高度宽度,每个Key的高度宽度等信息都是定义在dimens.xml中的。而在dimens.xml中,这些尺寸的单位都是in,在序程当中把这些单位转化成像素当前,是个很小的值。最后把这些尺寸单位改成dip,并置设好适合的值就好了。看来是系统移植到板子上当前,in和像素之间停止转换时出问题了。
(注:通篇有参考http://blog.csdn.net/a345017062/article/details/6130261,也加上了自己的解理,感激android老码农~~)
文章结束给大家分享下程序员的一些笑话语录:
人脑与电脑的相同点和不同点,人脑会记忆数字,电脑也会记忆数字;人脑会记忆程序,电脑也会记忆程序,但是人脑具有感知能力,这种能力电脑无法模仿,人的记忆会影响到人做任何事情,但是电脑只有程序软件。比尔还表示,人脑与电脑之间最重要的一个差别就是潜意识。对于人脑存储记忆的特别之处,比尔表示,人脑并不大,但是人脑重要的功能是联络,人脑会把同样的记忆存储在不同的地方,因此记忆读取的速度就不相同,而这种速度取决于使用的频率和知识的重要性。人脑的记忆存储能力会随着年龄增长而退化,同时记忆的质量也会随着年龄退化。经典语录网