Android輸入法架構(gòu)學習報告_第1頁
Android輸入法架構(gòu)學習報告_第2頁
Android輸入法架構(gòu)學習報告_第3頁
Android輸入法架構(gòu)學習報告_第4頁
Android輸入法架構(gòu)學習報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——Android輸入法架構(gòu)學習報告安卓輸入法框架(InputMethodFramework)IMF

一.輸入法框架簡介

自Android平臺1.5版本以后,Google開放了Android平臺輸入法框架(InputMethodFramework,IMF),IMF是Android平臺的特色設計。它的出現(xiàn)大大推動了不帶實體鍵盤的設備的誕生。同時,Android平臺輸入法框架也給出了輸入法的開發(fā)所需要的接口,為Android平臺的輸入法提供了可擴展性。

二.輸入法框架組成

一個IMF結(jié)構(gòu)中包含三個主要的部分:

●(輸入法服務)inputmethodmanager(IMM):管理各部分的交互,是一個客戶端API,存在于各個應用程序的context中,用來溝通管理所有進程間交互的全局系統(tǒng)服務,可以通過Context.getSystemService()來獲取一個InputMethodManager的實例。

●(輸入法應用)inputmethod(IME):實現(xiàn)一個允許用戶生成文本的獨立交互模塊。系統(tǒng)綁定一個當前的輸入法。使其創(chuàng)立和生成,決定輸入法何時隱蔽或者顯示它的UI。同一時間只能有一個IME運行。

●(客戶端)clientapplication:通過輸入法管理器控制輸入焦點和IME的狀態(tài)。一次只能有一個客戶端使用IME。輸入法整體框架如圖1所示:

圖1.輸入法的總體框架

2.1IMM的實現(xiàn)

InputMethodManagerService.java是整個系統(tǒng)當中,一切與輸入法有關的地方的總控制中心。它通過管理下面三個模塊來實現(xiàn)系統(tǒng)的輸入法框架。(1)WindowManagerService

負責顯示輸入法,接收用戶事件。(2)InputMethodService

輸入法內(nèi)部規(guī)律,鍵盤布局,選詞等,最終把選出的字符通過commitText提交出來。

(3)InputManager

由UI控件(View,TextView,EditText等)調(diào)用,用來操作輸入法。譬如,開啟,關閉,切換輸入法等。2.2輸入法應用組成

在IMF中,最主要的是輸入法應用,他繼承于AbstractInputMethodService。InputMethodService主要由以下幾個組件構(gòu)成,其中包括完成輸入法的相關UI和文字的輸出。

(1)軟鍵盤視圖(SoftInputView)

這是軟鍵盤的輸入?yún)^(qū)域,主要完成在觸摸屏下和用戶的交互輸入。onCreateInputView()被調(diào)用來進行軟鍵盤視圖的實例化;onEvaluateInputViewShown()決定是否顯7K軟鍵盤視圖;當狀態(tài)改變的時候,調(diào)用updateInputViewShownO來重新決策是否顯示軟鍵盤視圖。

(2)候選字視圖(CandidatesView)

CandidatesView也是輸入法中一個相當重要的組件。當用戶輸入字符的時候,顯不相關的列表。中止輸入的時候,就會自動消失。onCreateCandidatesView()來實例化自己的輸入法。和軟鍵盤視圖不同的是,候選字視圖對整個UI布局不會產(chǎn)生影響。setCandidatesViewShown(boolean)用來設置是否顯示候選字視圖。

(3)輸出字符

字符的輸出是InputMethodService最核心的功能,輸入法通過InputConnection從IMF來獲得字符輸出。并且通過不同的編輯器(editor)類型來獲取相應的支持。通過onFinishlnputO和onStartInput(EditorInfo,boolean)方法來進行輸入目標的切換。

另外,

onlnitializelnterfaceO用于InputMethodService在執(zhí)行的過程中配置的改變;onBindlnputO切換一個新的輸入通道;

onStartInput(EditorInfo,boolean)處理一個新的輸入。

三.輸入法消息流轉(zhuǎn)機制

輸入法框架包括客戶端、輸入法服務和輸入法應用三部分組成,如圖2所示。輸入法框架中消息的流轉(zhuǎn)機制為:當客戶端獲得焦點,啟動輸入法,創(chuàng)立一個連接類型對象,以實現(xiàn)輸入法框架各個層次間信息的傳輸。該連接類型實現(xiàn)了InputConnection接口。

圖2.輸入法消息流轉(zhuǎn)

四.輸入法生命周期

輸入法是用戶、應用程序之間的交互的渠道,所有的輸入法應用都需要繼承特定的Android平臺提供的服務。Android平臺的輸入法框架為輸入法應用定義了一個基類InputMethodService,InputMethodService提供了一個輸入法的標準實現(xiàn)流程,定義了輸入法生命周期內(nèi)的重要函數(shù),以便利開發(fā)人員對Android輸入法進行擴展。圖3即為Android輸入法生命周期。

圖3.Android輸入法生命周期

具體的實現(xiàn)步驟為:

1.當用戶點擊客戶端輸入控件(如editor),客戶端控件獲得焦點,InputMethodService啟動,調(diào)用其onCreate()函數(shù)。該函數(shù)在輸入法第一次啟動的時候被調(diào)用,用來做初始化的設置;2.調(diào)用onCreatelnputViewO函數(shù),在該函數(shù)中創(chuàng)立鍵盤視圖(KeyboardView)并返回;

3.調(diào)用onCreateCandidatesView()函數(shù),在該函數(shù)中創(chuàng)立候選字視圖(CandidatesView)實現(xiàn)并返回;

4.調(diào)用onStartlnput()函數(shù),始接收并處理輸入內(nèi)容;

5.輸入終止后調(diào)用onFinishlnputO函數(shù)來終止當前的輸入;6.假使移動到下一個輸入框,則重復調(diào)用onStartlnputView和onFinishlnput函數(shù);7.在輸入法關閉的時候調(diào)用onDestroy()函數(shù)。

五.輸入法主要的類和函數(shù)

在Android輸入法開發(fā)過程中,下面三個類的實現(xiàn)比較重要:

InputMethodService類:提供了好多的輸入法的基礎實現(xiàn),管理狀態(tài)的條款、輸入法的可見度、與當前可見的Activity溝通;

CandidateView類:提供候選字選擇視圖,直接繼承于View。負責顯示軟鍵盤上面的那個候選區(qū)域。

LatinKeyboard類:軟鍵盤類,直接繼承與Keyboard類。負責解析并保存鍵盤布局,并提供選詞算法,供程序運行當中使用。其中鍵盤布局是以XML文件存放在資源當中的。

Android的輸入法服務,通過一些接口函數(shù)與系統(tǒng)進行交互,在這些接口中,主要接口是InputMethodService。它提供了一個輸入法的標準實現(xiàn),開發(fā)輸入法時可以參照和自定義該實現(xiàn),表1顯示了InputMethodService接口提供的函數(shù)。

主要接口函數(shù)說明onlnitializelnterface進行UI的初始化,創(chuàng)立和修改時調(diào)用此接口onBindlnput在另外的客戶端和該輸入法連接時調(diào)用onStartlnput初始化整個輸入法,十分重要的一個回調(diào),它在編輯框中用戶已經(jīng)開始輸入的時候調(diào)用onCreatelnputView創(chuàng)立輸入視圖,返回一個層次性的輸入視圖,而且只是在這個視圖第一次顯示的時候被調(diào)用onCreateCandidatesView創(chuàng)立候選框視圖,當需要候選框顯示時調(diào)用onCreateExtractTextView全屏模式下的視圖onStartlnputView在輸入視圖被顯示并且在一個新的輸入框中輸入已經(jīng)開始的時候調(diào)用getCurrentlnputConnection此函數(shù)呼叫應用程序,接收原始的按鍵事件onFinishlnput終止輸入法表1.InputMethodService接口提供的函數(shù)

六.輸入法服務流程

6.1客戶端應用注冊到輸入法系統(tǒng)服務

6.1.1創(chuàng)立LocationManger

1)客戶端應用創(chuàng)立時,調(diào)用ViewRoot(…);2)調(diào)用ViewRoot.getWindowSession(…);

3)通過調(diào)用InputMethodManager.getInstance()創(chuàng)立LocationManager對象,一個客戶端應用只會創(chuàng)立一個LocationManager對象;

4)LocationManager對象創(chuàng)立時,會創(chuàng)立一個IInputMethodClient對象,同時創(chuàng)立一個IInputContext對象;

6.1.2注冊到輸入法系統(tǒng)服務

1)調(diào)用WindowMangerService.openSession(…);2)調(diào)用WindowMangerService.Session(…);

3)調(diào)用InputMethodMangerService.addClient(IInputMethodClientclient,IInputContextinputContext,intuid,intpid),將InputMethodManager中創(chuàng)立的IInputMethodClient對象以及InputMethodManager中創(chuàng)立的IInputContext對象傳入進去,其中uid為客戶端應用用戶ID,pid為客戶端應用進程ID;

4)參與到InputMethodManagerService維護的一個列表HashMap中,其中IBinder對應IInputMethodClient,一個InputMethodManager只有一個IInputMethodCliend。6.2客戶端應用調(diào)用輸入法1)TextView.setText();

2)調(diào)用InputMethodManager.restartInput();3)調(diào)用InputMethodManager.startInputInner();

4)調(diào)用InputMethodManagerService.startInput(IInputMethodClient,IInputContext…);

6.3輸入法系統(tǒng)服務調(diào)用輸入法

輸入法系統(tǒng)服務調(diào)用輸入法包括輸入法系統(tǒng)服務啟動輸入法,輸入法創(chuàng)立,輸入法系統(tǒng)服務建立與輸入法的會話,輸入法系統(tǒng)服務啟動輸入法以及輸入法服務顯示輸入法。

七.Android手機輸入法設計的主要內(nèi)容

一款手機輸入法能否得到用戶的認可,主要取決于輸入法的易用性和高效性以及界面的美觀度。因此,IME程序的設計主要是用戶交互接口的設計和編碼轉(zhuǎn)換引擎的設計。

首先,對于軟鍵盤輸入法來說,軟鍵盤的布局設計在很大程度上影響著用戶的使用,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論