Android 平台提供了一个拼写检查器框架,允许您在您的应用中实现和访问拼写检查。该框架是文本服务 API 之一。
要在您的应用中使用该框架,您可以创建一个 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 输入法编辑器 包含拼写检查的示例。