Android プラットフォームには、アプリにスペルチェックを実装してアクセスできるようにするスペルチェック フレームワークが用意されています。このフレームワークは、テキスト サービス API の 1 つです。
アプリでこのフレームワークを使用するには、スペルチェック session オブジェクトを生成する Android サービスを作成します。セッション オブジェクトは、入力したテキストに基づいて、スペルチェックで生成されたスペル候補を返します。
スペルチェックのライフサイクル
次の図は、スペルチェック サービスのライフサイクルを示しています。
スペルチェックを開始するには、アプリがスペルチェック サービスの実装を開始します。アクティビティや個々の UI 要素など、アプリ内のクライアントがスペル チェッカー セッションをサービスにリクエストし、そのセッションを使用してテキストの候補を取得します。クライアントはそのオペレーションを終了すると、スペルチェック セッションを閉じます。アプリは必要に応じて、いつでもスペルチェック サービスをシャットダウンできます。
スペルチェック サービスを実装する
アプリでスペル チェッカー フレームワークを使用するには、セッション オブジェクト定義を含むスペル チェッカー サービス コンポーネントを追加します。また、設定を管理するオプションのアクティビティをアプリに追加することもできます。スペルチェック サービスを記述する XML メタデータ ファイルを追加し、マニフェスト ファイルに適切な要素を追加します。
スペルチェック クラス
次のクラスを使用してサービス オブジェクトとセッション オブジェクトを定義します。
-
SpellCheckerService
のサブクラスSpellCheckerService
は、Service
クラスとスペル チェッカー フレームワーク インターフェースの両方を実装します。サブクラス内で、次のメソッドを実装します。createSession()
- スペルチェックを行うクライアントに
SpellCheckerService.Session
オブジェクトを返すファクトリ メソッド。
-
SpellCheckerService.Session
の実装- スペルチェック サービスがクライアントに提供するオブジェクト。クライアントは、オブジェクトをスペル チェッカーに渡し、候補を受け取ります。このクラス内で、次のメソッドを実装します。
onCreate()
createSession()
に応じて、システムによって呼び出されます。このメソッドでは、現在の言語 / 地域やその他の詳細情報に基づいて、SpellCheckerService.Session
オブジェクトを初期化できます。onGetSentenceSuggestionsMultiple()
- 実際のスペルチェックを行います。このメソッドは、渡された文の候補を含む
SentenceSuggestionsInfo
の配列を返します。
必要に応じて、スペルチェックのキャンセル リクエストを処理する
onCancel()
、単語の候補リクエストを処理するonGetSuggestions()
、または単語の候補のバッチ リクエストを処理するonGetSuggestionsMultiple()
を実装できます。
スペルチェックのマニフェストとメタデータ
コードに加えて、スペル チェッカーの適切なマニフェスト ファイルとメタデータ ファイルも提供します。
次の例に示すように、マニフェスト ファイルは、設定を制御するためのアプリ、サービス、アクティビティを定義します。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.samplespellcheckerservice" > <application android:label="@string/app_name" > <service android:label="@string/app_name" android:name=".SampleSpellCheckerService" android:permission="android.permission.BIND_TEXT_SERVICE" > <intent-filter > <action android:name="android.service.textservice.SpellCheckerService" /> </intent-filter> <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> </manifest>
システムのみがサービスにバインドするように、サービスを使用するコンポーネントは BIND_TEXT_SERVICE
権限をリクエストする必要があります。サービスの定義では、spellchecker.xml
メタデータ ファイルも指定しています。これについては、次のセクションで説明します。
メタデータ ファイル spellchecker.xml
には、次の XML が含まれています。
<spell-checker xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/spellchecker_name" android:settingsActivity="com.example.SpellCheckerSettingsActivity"> <subtype android:label="@string/subtype_generic" android:subtypeLocale="en” /> <subtype android:label="@string/subtype_generic" android:subtypeLocale="fr” /> </spell-checker>
メタデータでは、スペルチェックが設定の制御に使用するアクティビティを指定します。また、スペルチェックのサブタイプも定義します。この場合、サブタイプによって、スペルチェックが処理できるロケールが定義されます。
クライアントからスペルチェック サービスにアクセスする
TextView
ビューと EditText
ビューを使用するアプリでは、TextView
が自動的にスペルチェックを使用するため、スペルチェックが自動的に適用されます。
ただし、それ以外のケースでは、スペルチェック サービスを直接操作する必要があります。次の図は、スペルチェック サービスを操作するための制御フローを示しています。
Android オープンソース プロジェクトの LatinIME インプット メソッド エディタに、スペルチェックの例が含まれています。