LatinIME輸入法分析

2021-09-06 18:41:27 字數 1273 閱讀 3842

輸入法的設定在res/xml/method.xml的標籤中,主要設定兩個屬性:

android:settingsactivity,輸入法的設定程式入口。

android:isdefault,這個輸入法是不是系統的預設輸入法。

最主要的字母布局由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方法把這張bitmap渲染到ondraw傳遞過來的canvas上。

繪製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也賦值。

這次遇到的問題是latinime布局混亂,開啟這個輸入法時,整個輸入法介面被擠在螢幕下方乙個高度非常小的矩形範圍內。經過跟蹤,發現輸入法的布局的高度寬度,每乙個key的高度寬度等資訊都是定義在dimens.xml中的。而在dimens.xml中,這些尺寸的單位都是in,在程式其中把這些單位轉化成畫素以後,是個非常小的值。最後把這些尺寸單位改為dip,並設定好合適的值就好了。看來是系統移植到板子上以後,in和畫素之間進行轉換時出問題了。

LatinIME輸入法分析

輸入法的設定在res xml method.xml的標籤中,主要設定兩個屬性 android settingsactivity,輸入法的設定程式入口。android isdefault,這個輸入法是不是系統的預設輸入法。最基本的字母布局由res xml 下面的kbd qwerty.xml,kbd q...

LatinIME輸入法的一些總結

1.關於輸入法的一些設定重要檔案 res xml method.xml 在該檔案中在前面的部落格中說明可以新增鍵盤輸入語言。另外,還有其他的一些重要的設定 輸入法的設定在res xml method.xml的標籤中,主要設定兩個屬性 android settingsactivity,輸入法的設定程式...

智慧型ABC輸入法溢位分析

下面在來看一段關於0x7380ac95的 7380adb4 56 push esi 7380adb5 e8 58140000 call winabc.7380c212 7380adba 85c0 test eax,eax 7380adbc 74 20 je short winabc.7380adde...