Input Method Framework

Input Method Framework,簡稱imf,指輸入方法框架、輸入法框架。

基本介紹

  • 外文名:Input Method Framework
  • 簡稱:IMF
  • 平台:安卓
  • 關於:輸入法
基本介紹,代碼位置,

基本介紹

從SDK 1.5版本以後,Android就開放它的IMF(Input Method Framework),讓我們能夠開發自己的輸入法。
一個IMF結構中包含三個主要的部分:
input method manager:管理各部分的互動。它是一個客戶端API,存在於各個應用程式的context中,用來溝通管理所有進程間互動的全局系統服務。
input method(IME):實現一個允許用戶生成文本的獨立互動模組。系統綁定一個當前的輸入法。使其創建和生成,決定輸入法何時隱藏或者顯示它的UI。同一時間只能有一個IME運行。
client application:通過輸入法管理器控制輸入焦點和IME的狀態。一次只能有一個客戶端使用IME。
InputManager
由UI控制項(View,TextView,EditText等)調用,用來操作輸入法。比如,打開,關閉,切換輸入法等。
它是整個輸入法框架(IMF)結構的核心API,處理應用程式和當前輸入法的互動。可以通過Context.getSystemService()來獲取一個InputMethodManager的實例。
在開發過程中,最基礎最重要的就是養成閱讀API的習慣。優秀的程式設計師要養成把自己關在小黑屋里,斷絕與外界的聯網和聯繫,僅僅靠自己電腦中的開發環境和API文檔,以及漂亮女僕送來的每天三頓飯,寫出優秀的程式。這個在武俠小說中叫閉關,在軟體開發中叫Clean Room,哈哈。
Android的API文檔在:%SDK_ROOM%/docs/reference/index.html,InputManager類的位置:%SDK_ROOM%/docs/reference/android/view/inputmethod/InputMethodManager.html
InputMethodService
包括輸入法內部邏輯,鍵盤布局,選詞等,最終把選出的字元通過commitText提交出來。實現輸入法的基礎就是名為InputMethodService的類,比如你要實現一個谷歌輸入法,就是要extends本類。我們接下來要學習的SoftKeyboard Sample也是extends本類。InputMethodService類的位置在:%SDK_ROOM%/docs/reference /android/inputmethodservice/InputMethodService.html
InputMethodService是InputMethod的一個完整實現,你可以再在其基礎上擴展和定製。它的主要方法如下:
onInitializeInterface() 顧名思義,它在初始化界面的時候被調用,而一般是由於配置檔案的更改導致該函式的執行
onBinndInput() 它在另外的客戶端和該輸入法連線時調用
onStartInput() 非常重要的一個回調,它在編輯框中用戶已經開始輸入的時候調用。比如,當點擊一個輸入框,我們需要根據這個輸入框的信息,設定輸入法的一些特性,這個在Sample中很有體會。
onCreateInputView() 返回一個層次性的輸入視圖,而且只是在這個視圖第一次顯示的時候被調用
onCreateCandidatesView()onCreateInputView(),只不過創建的是候選框的視圖。
onCreateExtractTextView() 比較特殊,是在全螢幕模式下的一個視圖。
onStartInputView() 在輸入視圖被顯示並且在一個新的輸入框中輸入已經開始的時候調用。
基本上輸入法的定製,都是圍繞在這個類來實現的,它主要提供的是一個基本的用戶界面框架(包括輸入視圖,候選詞視圖和全螢幕模式),但是這些都是要實現者自己去定製的。這裡的實現是讓所有的元素都放置在了一個單一的由InputMethodService來管理的視窗中。它提供了很多的回調API,需要我們自己去實現。一些默認的設定包括:
軟鍵盤輸入視圖,它通常都是被放置在螢幕的下方。
候選詞視圖,它通常是放置在輸入視圖的上面。
當我們輸入的時候,需要改變應用程式的界面來適應這些視圖的放置規則。比如在Android上面輸入,編輯框會自動變形騰出一個軟鍵盤的位置來。

代碼位置

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
輸入法管理服務
packages/inputmethods/
現有的輸入法
development/samples/SoftKeyboard/
軟鍵盤示例
frameworks/base/core/java/android/view/View.java
frameworks/base/core/java/android/widget/TextView.java
控制項和輸入法的互動

相關詞條

熱門詞條

聯絡我們