為 Android 平台開發一個IME

來源:互聯網
上載者:User

標籤:android   class   code   http   tar   ext   

學習目標:

  1. 實現新的IME

學習目的:

  1. 掌握AndroidIME架構

學習收穫:

Android 1.5 新特色之一就是IME架構(Input Method Framework,IMF),正是它的出現,才為誕生不帶實體鍵盤的裝置提供了可能。IMF設計用來支援不同的IME,包括了soft keyboard,hand-writing recognizes和hard keyboard translators。這裡,我們把焦點鎖定在soft keyboard上。

新特色對普通應用開發人員而言,應該確保讓應用能夠和IMF很好的配合,提供優秀的使用者體驗。應用要做的最重要事情,就是對每個EditText使用 新的屬性android:inputType,這個屬性實際代替了很多已經存在的屬性,包括android:password, android:singleLine, android:numeric, android:phoneNumber, android:capitalize, android:autoText, android:editable。如果你兩個都聲明了,Cupcake裝置就會使用新的android:inputType屬性,而忽視其他的。

主要的API就是android.view.inputmethod.InputMethodManager,你可以通過Context.getSystemService方法來擷取。它允許你和全域IME狀態進行互動,例如顯式隱藏或者顯示IME的IME地區。

新特色對於系統開發人員而言,其提供了開發各種各樣語言IME的實現入口,有了它,其他語言IME才能進駐Android。以下內容即關注如何?一個IME。

要建立一個IME,需要繼承android.inputmethodservice.InputMethodService。這個類提供了IME的 基本實現,包括狀態管理、控制IME可見,還有和當前activity通訊。Android提供了兩個IME和一個樣本,這兩個IME分別是 PinyinIME和LatinIMEIME,你可以在源碼packages/inputmethods下找到,樣本即SoftKeyboard,可以在 SDK 1.5下的platforms/android-1.5/samples下找到。這三個IME提供了目前實現Android平台IME實現的最佳參考。

IME的打包方式和其他應用是相同的,在AndroidManifest.xml中,要把IME聲明為service,並附帶上合適的intent filter和相關的meta data。如下所示:

<service android:name=".DemoIme"
android:label="@string/ime_name"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
<meta-data android:name="android.view.im" android:resource="@xml/method" />
</service>

如果IME允許使用者調整設定,那麼你還應該提供一個setting activity。這個時候不要忘記在input-method的XML檔案中,加入相關的屬性,如以下所示(這個檔案就是剛才meta-data中的@xml/method):

<input-method xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="com.demo.SettingsActivity" 
android:isDefault="@bool/im_is_default" />

IME在UI展現上,有兩個主要的可見元素,input view和candiate view。但這不是必需的,可以根據實際需要選擇你需要的元素。Input View,是使用者從鍵盤、手寫或者其他方式輸入文本的地方。當IME第一次展現的時 候,InputMethodService.onCreateInputView()就會被調用。Candidates View,是候選詞彙集合出現的地方。其可有可無,可以在調用InputMethodService.onCreateCandidatesView時返 回null,–這是它的預設行為。

應用的文本區可以有不同的輸入類型,包括文本、數值、URL、郵箱地址和搜尋,因此在你實現新的IME時,需要當心不同的輸入類型。IME並不會自 動切換不同的輸入類型,所以你要在IME中支援所有的類型。不過可以輕鬆一點的是, IME並不負責輸入內容的校正,—因為這是應用的職責。網頁模板

InputMethodService.onStartInputView()被調用時,會傳入一個EditorInfo對象,這個對象包含了關於 輸入類型和text field的其他屬性的細節。EditorInfo.inputType和EditorInfo.TYPE_CLASS_MASK可以是很多值,包括 TYPE_CLASS_NUMBER,TYPE_CLASS_DATETIME,TYPE_CLASS_PHONE,TYPE_CLASS_TEXT。可 以通過android.text.InputType瞭解更多資訊。

要把文本發送給應用有兩種方式,你可以發送單一的按鍵事件,也可以在應用的文字框內編輯游標附近的文本。發送按鍵事件,可以簡單構造 KeyEvent對象,並且調用InputConnection.sendKeyEvent(),或者更加方便一點,使用 InputMethodService.sendDownUpKeyEvents(keyEventCode)。http://www.huiyi8.com/moban/在編輯文字框 時,android.view.inputmethod.InputConnection有一些很有用的方法,例如 getTextBeforeCursor()等等。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.