输入法的设置在res/xml/method.xml的<input-method>标签中,主要设置两个属性:
android:settingsActivity,输入法的设置程序入口。
android:isDefault,这个输入法是不是系统的默认输入法。
另外,如果输入法的apk直接push到/system/app/下面的话,算是系统输入法,如果是以第三方程序的方式安装到/data/app/下面的话,算是第三方输入法,两个输入法目前来看,最大的不同在于,使用第三方输入法时必须在设置->语言和键盘当中手工启动。
最基本的字母布局由res/xml/下面的kbd_qwerty.xml,kbd_qwerty_black.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方法把