Android SDK 之 InputMethodService 詳解

http://www.cnmsdn.com/html/201003/1268842609ID2158.html
需要將一個現有的輸入法移植到Android平臺上去,根據以前的經驗來看,Android還沒有輸入法框架的,開發成本非常高。所幸的是,在1.5版本之後,Android果斷的開放了他的IMF,這給了我們很大的鼓舞。
  要自己動手寫一個輸入法,入手的例子可以看他的Sample中的 SoftKeyboard。這個例子其實寫的非常的清楚,它也自稱這是一個非常完整的輸入法實現,雖然只是簡單的英文和數字等的輸入。
  入手的接口是InputMethodService。它是InputMethod的一個完整實現,你可以再在其基礎上擴展和定製。他有5個可能我們會非常感興趣的類。
  onInitializeInterface() 看名字就知道,他是在初始化界面的時候被調用,而一般是一位配置文件的更改導致該函數的執行
  onBinndInput() 它在另外的客戶端和該輸入法連接時調用
  onStartInput() 這個非常重要的一個回調,它在編輯框中用戶已經開始輸入的時候調用。比如你點擊一個輸入框,你需要根據這個輸入框的信息,設置輸入法的一些特性,這個在 Sample中很有體會
  onCreateInputView() onCreateCandidatesView() onCreateExtractTextView() 第一個是返回一個層次性的輸入視圖,而且只是在第一次這個視圖顯示的時候被調用。第二個跟第一個是一樣的,只不過創建的是候選框的視圖。第三個比較特殊,他是在全屏模式下的一個視圖。
  onStartInputView() 它是在輸入視圖被顯示並且在一個新的輸入框中輸入已經開始的時候調用。
  基本上輸入法的定製,都是圍繞在這個接口來實現的,它主要提供的是一個基本的用戶界面框架(包括輸入視圖,候選詞視圖和全屏模式),但是這些都是要實現者自己去定製的。這裏的實現是讓所有的元素都放置在了一個單一的由InputMethodService來管理的窗口中。他提供了很多的回調API,需要自己去實現。那麼一些默認的設置包括:
  1. 軟鍵盤輸入視圖,它通常都是被放置在屏幕的下方。
  2. 候選詞視圖,它通常是放置在輸入視圖的上面。
  3. 當你輸入的時候,是改變你的應用程序的界面來適應這些視圖的放置規則的。比如你在Android上面輸入,編輯框會自動變形騰出一個軟鍵盤的位置來。
  再介紹這兩個非常重要的視圖:
  1. 軟輸入視圖。這個是和用戶交互的主要發生地:按鍵,畫圖或者其他的方式。通常的實現就是簡單的用一個視圖來處理所有的工作,並且在調用onCreateInputView的時候返回一個新的實例。那麼你怎麼知道該不該來顯示你的輸入視圖呢,這個可以調用系統的 onEvaluateInputViewShow來測試是否需要,這個是系統根據當前的上下文環境來實現的。所以你的輸入法狀態改變的時候,就需要調用 updateInputViewShown來重新估計一下。
  2. 候選詞視圖。 當用戶輸入一些字符之後,輸入法可能需要提供給用戶一些可用的候選詞的列表。這個視圖的管理和輸入視圖不大一樣,因爲這個視圖是非常的短暫的,它只是在有候選詞的時候纔會被顯示。可以用setCandidatesViewShow來設置是否需要顯示這個視圖。正是因爲這個顯示的頻繁性,所以它一般不會被銷燬,而且不會改變你的應用程序的視圖。
  最後一個最爲關鍵的問題就是文本的產生了,這也是一個IME的最終目的。這個是通過 InputConnection來鏈接IME和應用程序的。它能夠直接產生生的按鍵信息,或者甚至直接在候選和提交的文本中編輯。當用戶在不同的輸入目標之間切換的時候,IME會不斷的調用onFinishInput() 和 onStartInput()。在這兩個函數中,需要反覆做的就是復位狀態,並且應對新的輸入框的信息。
  好了,以上就是一個輸入法的最最基本的東西了,下面將根據Sample中的SoftKeyboard來說明這些問題。

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