LatinIME輸入法的一些總結

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老碼農~~)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章