【Touch&input 】拼写检查框架(21)

Android平台提供拼写检查器框架,可让您在应用程序中实施和访问拼写检查。该框架是Android平台提供的文本服务API之一。

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

拼写检查器生命周期


下图显示了拼写检查器服务的生命周期:
【Touch&input 】拼写检查框架(21)
图1.拼写检查器服务生命周期

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

实施拼写检查器服务


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

拼写检查器类

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

一个子类 SpellCheckerService
的SpellCheckerService同时实现 Service类和拼写检查器框架接口。在你的子类中,你必须实现下面的方法:
createSession()
将SpellCheckerService.Session对象返回给想要拼写检查的客户端的工厂方法 。
请参阅 拼写检查服务示例应用程序以了解更多关于实施此类的信息。

一个实现 SpellCheckerService.Session
拼写检查器服务提供给客户的一个对象,以便让他们将文本传递给拼写检查器并接收建议。在这个类中,您必须实现以下方法:
onCreate()
由系统调用以响应 createSession()。在此方法中,可以SpellCheckerService.Session基于当前语言环境等初始化 对象。
onGetSentenceSuggestionsMultiple()
是否进行实际的拼写检查。该方法返回一个SentenceSuggestionsInfo包含传递给它的句子的建议数组 。
或者,您可以实现 onCancel()处理取消拼写检查的 onGetSuggestions()请求,处理单词建议请求或 onGetSuggestionsMultiple()处理批量单词建议请求的请求。

请参阅 拼写检查器客户端示例应用程序以了解有关实施此类的更多信息。

注意:您必须将拼写检查的所有方面实现为异步和线程安全。一个拼写检查器可以被运行在不同核心上的不同线程同时调用。在SpellCheckerService和 SpellCheckerService.Session自动照顾这一点。

拼写检查器清单和元数据

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

清单文件定义了用于控制设置的应用程序,服务和活动,如下面的代码片段所示:

<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视图的应用程序自动受益于拼写检查,因为它会TextView自动使用拼写检查程序。以下屏幕截图显示了这一点:

【Touch&input 】拼写检查框架(21)
图2. TextView中的拼写检查
但是,您也可以在其他情况下直接与拼写检查器服务进行交互。下图显示了与拼写检查器服务进行交互的控制流程:
【Touch&input 】拼写检查框架(21)
图3.与拼写检查器服务进行交互。

该 拼写检查器客户端示例应用程序演示了如何使用拼写检查服务进行交互。Android开放源代码项目中的LatinIME输入法编辑器还包含拼写检查的示例。

Lastest Update:2018.04.23

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Touch&input 】拼写检查框架(21)

猜你喜欢

转载自blog.51cto.com/4789781/2125398
今日推荐