截取硬體的按鍵事件 即使IME視窗沒有明確的焦點,它也會首先接收到硬體的按鍵事件,並能夠選擇是使用還是把它們轉寄給應用程式。例如,在文本編排期間,你可以使用方向鍵在IMEUI的候選區進行導航。你也可以捕獲回退鍵來消除從IME視窗彈出的任何視窗。 重寫onKeyDown()和onKeyUp()方法來擷取硬體的按鍵事件。 對於不想自己處理的按鍵,要記住調用super()方法。 建立IME的子類型 子類型運行IME來展現多種輸入模式以及由IME所支援的語言。一個子類型可以表現為: 1. 一種語言環境,如en_US或fr_FR; 2. 一種輸入模式,如語音、鍵盤或手寫; 3. 其他的輸入樣式、格式、或特殊的IME屬性,如10個鍵或qwerty鍵盤的布局等。 基本上模式是任意文字,如“keyboard”、“voice”等等。 一個子類型也可以是這些類型的一個組合。 子類型資訊被用於IME的切換,在通知欄和IME設定視窗中可以使用。這些資訊也允許架構直接攜帶特定的IME子類型。當你建立一個IME時,可以方便的使用子類型,因為它會協助使用者標識並完成不同IME語言和模式之間的切換。 使用<subtype>元素在IME的XML資源檔中定義一種子類型。下面的樣本中定義了兩種子類型:一種是用於美國英語環境的鍵盤子類型,另一中是用於法語環境的鍵盤子類型: <input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.softkeyboard.Settings" android:icon="@drawable/ime_icon" <subtype android:name="@string/display_name_english_keyboard_ime" android:icon="@drawable/subtype_icon_english_keyboard_ime" android:imeSubtypeLanguage="en_US" android:imeSubtypeMode="keyboard" android:imeSubtypeExtraValue="somePrivateOption=true" /> <subtype android:name="@string/display_name_french_keyboard_ime" android:icon="@drawable/subtype_icon_french_keyboard_ime" android:imeSubtypeLanguage="fr_FR" android:imeSubtypeMode="keyboard" android:imeSubtypeExtraValue="foobar=30,someInternalOption=false" /> <subtype android:name="@string/display_name_german_keyboard_ime" ... /> /> 使用%s來獲得與子類型的語言標籤相同的子類型標籤,以便確保你的子類型在UI中被正確的標記。以下是IME的部分XML檔案: <subtype android:label="@string/label_subtype_generic" android:imeSubtypeLocale="en_US" android:icon="@drawable/icon_en_us" android:imeSubtypeMode="keyboard" /> 以下是部分的IME的strings.xml檔案。字串資源label_subtype_generic被IME的UI用於設定子類型的標籤,定義如下: <stringname="label_subtype_generic">%s</string> 這樣在任何英語的語言環境中,就會把子類型的顯示名稱設定為“English(United States)”,或者是其他對應的語言。