拼写检查框架

Android 平台提供了一个拼写检查框架,允许您在应用中实现和访问拼写检查功能。该框架是文本服务 API 之一。

要在您的应用中使用此框架,您需要创建一个 Android 服务,该服务会生成一个拼写检查器会话对象。根据您提供文本,会话对象会返回拼写检查器生成的拼写建议。

拼写检查器生命周期

下图显示了拼写检查器服务的生命周期

An image showing the lifecycle for the spelling checker service
图 1. 拼写检查器服务生命周期。

要启动拼写检查,您的应用会启动其拼写检查器服务的实现。应用中的客户端(例如 Activity 或各个 UI 元素)会从服务请求拼写检查器会话,然后使用该会话获取文本建议。当客户端终止其操作时,它会关闭其拼写检查器会话。如有必要,您的应用可以随时关闭拼写检查器服务。

实现拼写检查器服务

要在您的应用中使用拼写检查框架,请添加一个包含会话对象定义的拼写检查器服务组件。您还可以向您的应用添加一个可选的 Activity 来控制设置。添加一个描述拼写检查器服务的 XML 元数据文件,并将相应的元素添加到您的清单文件中。

拼写检查器类

使用以下类定义服务和会话对象

  • SpellCheckerService 的子类
    SpellCheckerService 同时实现了 Service 类和拼写检查器框架接口。在您的子类中,实现以下方法
    createSession()
    一个工厂方法,它会将 SpellCheckerService.Session 对象返回给想要检查拼写的客户端。
  • SpellCheckerService.Session 的实现
    拼写检查器服务提供给客户端的对象,允许客户端将文本传递给拼写检查器并接收建议。在此类中,实现以下方法
    onCreate()
    系统会响应 createSession() 调用此方法。在此方法中,您可以根据当前语言环境和其他详细信息初始化 SpellCheckerService.Session 对象。
    onGetSentenceSuggestionsMultiple()
    执行实际的拼写检查。此方法会返回一个 SentenceSuggestionsInfo 数组,其中包含传递给它的句子的建议。

    您可以选择实现 onCancel()(处理取消拼写检查的请求);onGetSuggestions()(处理单词建议请求);或 onGetSuggestionsMultiple()(处理批量的单词建议请求)。

拼写检查器清单和元数据

除了代码之外,还要为拼写检查器提供相应的清单文件和元数据文件。

清单文件定义了应用、服务和用于控制设置的 Activity,如下例所示

<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>

元数据指定了拼写检查器用于控制设置的 Activity。它还为拼写检查器定义了子类型。在这种情况下,子类型定义了拼写检查器可以处理的语言环境。

从客户端访问拼写检查器服务

使用 TextViewEditText 视图的应用会自动受益于拼写检查,因为 TextView 会自动使用拼写检查器

An image showing how the spell checker is automatically enabled in EditText
图 2. EditText 中的拼写检查。

但是,在其他情况下,您可能想要直接与拼写检查器服务进行交互。下图显示了与拼写检查器服务交互的控制流程

An image showing the diagram of the interaction with a spell checker service
图 3. 与拼写检查器服务的交互。

Android 开源项目中的 LatinIME 输入法编辑器 包含拼写检查示例。