輸入法(IME)是讓使用者輸入文本的控制項。Android提供了一個可擴充的的IME的架構,它允許應用程式給使用者提供另外的IME,如軟鍵盤或語音輸入。這些IME一旦安裝,使用者就可以從系統的設定中選擇他們想要使用的IME,並且這個設定對整個系統都是有效,每次只有一種IME是可用的。
要在Android系統中添加一種IME,你就要建立一個包含繼承了InputMethodService類的類應用程式。另外,你通常還要建立一個“settings”Activity,把選項傳遞給IME服務。你還可以定義一個用於設定的UI,讓它做為系統設定的一部分來顯示。
本文包含以下內容:
1. IME的生命週期。
2. 在應用程式的清單中聲明IME組件;
3. IME API
4. 設計IME的UI
5. 從IME中把文本發送給應用程式
6. 使用IME子類型
IME的生命週期
介紹IME的生命週期:
圖1.IME的生命週期
下列章節介紹如何?UI以及代碼如何跟這個生命週期相關聯。
在清單中生命IME組件
在Android系統中,IME是一個包含了特殊IME服務的Android應用程式。應用程式的資訊清單檔必須聲明服務、申請必要的許可權、提供跟action.view.InputMethod操作相匹配的Intent過濾器、以及定義IME的特性的中繼資料。另外,還要提供一個設定介面,允許使用者用它來編輯IME的行為,你可以定義一個從系統設定中能夠啟動的“settings”的Activity。
以下清單片段聲明了IME服務。它申請了允許把服務串連到系統的IME的BIND_INPUT_METHOD許可權,建立了一個跟android.view.InputMethod操作相匹配的Intent過濾器,並且給IME定義了中繼資料:
複製代碼 代碼如下:<!-- Declares the input method service -->
<service android:name="FastInputIME"
android:label="@string/fast_input_label"
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聲明了用於設定的Activity。它有一個ACTION_MAIN類型的Intent過濾器,這指明了該Activity是IME應用程式的主入口:複製代碼 代碼如下:<!-- Optional: an activity for controlling the IME settings -->
<activity android:name="FastInputIMESettings"
android:label="@string/fast_input_settings">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
你還可以在這個設定的UI中提供對IME設定的直接存取。