Android IMFIME總結

來源:互聯網
上載者:User

IMF是input method framework的簡稱, 它是Android 1.5新添加進去的一個重要功能,用來支援軟鍵盤、各種的IME。
到目前位置(2009-04-03),Android 1.5還沒有正式發布,但IMF的功能已經很穩定,其上已經存在有3種IME。分別是
LatinIME(軟鍵盤)、 OpenWnn(CJKIME)、PinyinIME(GOOGLE 拼音),還缺少中文的手寫、五筆。
雖說按照已有的IME模組, 也能寫出自己想要的IME。但是弄懂底層一些的東西,對於寫新的IME還是有協助的。
相關代碼的位置:
frameworks/base/core/java/com/android/internal/view/
IMF介面定義
frameworks/base/core/java/android/view/inputmothod/
IMF用戶端
frameworks/base/core/java/android/inputmethodservice/
IMF服務端
frameworks/base/services/java/com/android/server/InputMethodManagerService.java
IME管理服務
packages/inputmethods/
現有的IME
development/samples/SoftKeyboard/
軟鍵盤樣本
frameworks/base/core/java/android/view/View.java
frameworks/base/core/java/android/widget/TextView.java
控制項和IME的互動
按照SDK文檔的敘述,IMF包含3個主要部分:
1、input method manager (IMM)
相當於用戶端的API,協調其它部分的互動,負責跟系統服務(IMMS) 通訊。
2、input method (IME)
介面和IME引擎, 處理使用者的輸入。
3、client applications
傳遞一些資訊, IMM用來決定焦點和IME狀態, IME一次只能有一個Client串連。
InputMethodManager
執行個體化的時候, 會串連到IMMS服務,然後一些調用裡會請求IMMS的服務。
InputMethodManagerService
處理來自InputMethodManager的請求,管理IME服務。
初始化的時候,會做如下一些事情:
1、註冊一些系統事件,處理事件(開關屏、關閉系統對話方塊、包改變)跟IME的互動, 例如: 關屏時會把IME菜單關閉;
IME包被刪除時,將IME從可用列表移除等。
2、載入IME列表(buildInputMethodListLocked),讀取啟用的IME,如果設定為空白,載入全部IME,並選擇一個預設IME。
3、載入狀態列表徵圖、載入DB服務端。
View和IME的互動
onFocusChanged()
失去焦點調用用imm.focusOut(), 得到焦點調用imm.focusIn()
onWindowFocusChanged
失去焦點調用用imm.focusOut(), 得到焦點調用imm.focusIn()
TextView和IME的互動
setInputType()
改變IME類型後, 會重啟IMEimm.restartInput()
onEditorAction()
收到輸入完成事件,隱藏IME介面imm.hideSoftInputFromWindow()
onDraw()
輸入框內容改變,更新IME的內容imm.updateExtractedText
輸入框文本被選擇, 更新IME的選擇資訊imm.updateSelection
輸入框的游標位置改變, 更新IME的游標位置imm.updateCursor
ps. imm.isWatchingCursor
onKeyUp()
收到KEYCODE_DPAD_CENTER按鍵事件, 顯示IME介面imm.showSoftInput,這個事件滑鼠左鍵點擊,都是輸入框擷取焦點。
收到KeyEvent.KEYCODE_ENTER按鍵事件,狀態是輸入完成,關閉IME介面 imm.hideSoftInputFromWindow()
onTouchEvent()
觸屏事件, 輸入框擷取焦點, 顯示IME介面imm.showSoftInput
isInputMethodTarget()
調用imm.isActive(), 用來判斷此控制項是否啟用IME
onTextContextMenuItem()
如果使用者選擇了“切換IME”(ID_SWITCH_INPUT_METHOD),顯示IME菜單imm.showInputMethodPicker
setKeyListener()
每次調用都重啟IMEimm.restartInput()
setText()
輸入框內容改變, 重啟IMEimm.restartInput()

 

轉自:http://www.getideas.cn/?p=231

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.