Android基礎知識之拼寫檢查框架

weixin_34402090發表於2013-06-24

原文:http://android.eoe.cn/topic/android_sdk

拼寫檢查器框架

Android平臺提供了一個拼寫檢查器的框架,來方便你在你的應用中實現並使用拼寫檢查。這個框架是Android平臺提供的文字服務API之一。

要在你的應用中使用該框架,你需要建立一個特殊的AndroidService來生成一個拼寫檢查器會話物件。這個會話物件會基於你提供的文字,來返回拼寫檢查器生成的拼寫建議。

以下的圖表顯示了拼寫檢查器服務的生命週期:

http://developer.android.com/resources/articles/images/spellcheck_lifecycle.png

圖1.拼寫檢查器服務的生命週期。

為了初始化拼寫檢查,你的應用必須實現它自己的拼寫檢查器服務。你應用中的客戶端,比如activity,或是獨立的UI元素,需要從服務中獲取一個拼寫檢查器會話,然後使用該會話為文字獲取拼寫建議。當一個客戶端停止它的活動時,它結束自己的會話。你的應用可以在必要時,隨時關閉拼寫檢查器服務。

為了在你的應用中使用拼寫檢查器框架,你需要新增一個包含會話物件實現的拼寫檢查器服務元件。你也可以為你的應用增加一個可選的activity來控制設定。你也必須新增一個後設資料xml檔案來描述拼寫檢查器服務,並在manifest檔案中增加適當的元素。

拼寫檢查類。

用以下的類來定義服務和會話物件:

一個SpellCheckerService的子類。
:SpellCheckerService實現了Service類和拼寫檢查器框架介面,在你的子類中,你必須實現以下方法:

:createSession())
::這是一個工廠方法,它為客戶端返回一個 SpellCheckerService.Session 物件來實現拼寫檢查。
:檢視Spell Checker Service 樣例應用,來學習更多實現該類的知識。

一個SpellCheckerService.Session的實現。
:這是一個拼寫檢查器服務給客戶提供的物件,來讓他們把文字傳遞給拼寫檢查器並接收提示。在這個類裡,你必須實現以下方法:
:onCreate())
::這是createSession())的系統回撥函式,在這個方法中,你可以基於本地化以及其它內容,初始化SpellCheckerService.Session物件。
:[http://developer.android.com/reference/android/service/textservice/SpellCheckerService.Session.html#onGetSentenceSuggestionsMultipleandroid.view.textservice.TextInfo[](, int) onGetSentenceSuggestionsMultiple()]
::該函式真正來進行拼寫檢查,它返回一個SentenceSuggestionsInfo陣列,該陣列包含了傳入句子的提示。
:你也可以實現一些可選的函式,比如onCancel())是用來處理取消拼寫檢查的請求,int) onGetSuggestions()是用來處理一個詞提示請求,或者int) onGetSuggestionsMultiple()是用來處理一組詞的提示的請求。

:檢視Spell Checker Service 例子應用來學習更多。

注意:你必須把拼寫檢查設為非同步和執行緒安全的。一個拼寫檢查器可能被在不同核心上的不同的執行緒同時呼叫。SpellCheckerService 和 SpellCheckerService.Session自動實現了上述要求。

拼寫檢查器的宣告和後設資料

除了程式碼以外,你需要為拼寫檢查器提供合適的manifest檔案和後設資料檔案。

mainifestt檔案定義了應用,服務,以及用於設定的活動,如下示:






 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
        <meta-data
            android:name="android.view.textservice.scs"
            android:resource="@xml/spellchecker" />
    </service>

    <activity
        android:label="@string/sample_settings"
        android:name="SpellCheckerSettingsActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
</application>

注意想要使用該服務的元件需要使用BIND_TEXT_SERVICE的許可來確保系統繫結該服務。該服務的定義中還確定了spellchecker.xml後設資料檔案,這將在下一節給出。

後設資料檔案spellchecker.xml的內容如下:

後設資料裡確定了拼寫檢查器用於控制設定的activity。它還定義了拼寫檢查器的子類;在這種情況下,子類定義了拼寫檢查器適用的地區。

使用TextView檢視應用自動獲取拼寫檢查,因為TextView會自動使用一個拼寫檢查器。如下截圖所示:

http://developer.android.com/resources/articles/images/textview_spellcheck_screenshot_2.png

圖2.TextView中的拼寫檢查

然而在其它情況下,你可能也想要直接與拼寫檢查器服務進行交流。如下圖表是直接與拼寫檢查器交流的控制流程:

http://developer.android.com/resources/articles/images/spellcheck_client_flow.png

圖3.與一個拼寫檢查器服務互動。

Spell Checker Service 例子應用,將教你如何與一個拼寫檢查服務進行互動。Android Open Source Project裡的LatinIME輸入法編輯器裡也有一個拼寫檢查的例子。

相關文章