Posted by Satoshi Kataoka and Ken Wakasa of the Android text input engineering team。翻译:tamer.cnblogs.com
拼写检查器框架通过帮助用户快速的识别并纠正拼写错误来提高Android平台的输入体验。当App使用了拼写检查器框架后,用户可以看到在拼错的或不能识别的字符下有红色的下划线,这样用户就可以通过选择下拉列表提供的建议词组快速地纠正错误。
如果你是一个输入法(IME)开发者,那么拼写检查器框架给你一个非常好的方式来为你的用户提供更好的体验。你可以为你的IME添加你自己的拼写检查器服务,从你自定义的字典中来提供一致的拼写错误修正。你的拼写检查器能够识别并为这些词汇提供正确的建议,这对你的用户来说是非常重要的,并且如果内建的拼写检查器并不支持你的语言,你可以提供一个支持那种语言的拼写检查器。
拼写检查器的API让你用很少的步骤就能创建你自己的拼写检查器服务。这个框架管理着你的拼写检查器服务与文本输入域的交互。在这篇文章中,我们会给你一个如何实现拼写检查器服务的概述。详情请看拼写检查器框架API指南。
为了创建一个拼写检查器服务,第一步要创建一个继承自android.service.textservice.SpellCheckerService的拼写检查器服务类。
为了能实现一个拼写检查器的例子,你可以学习一下Android SDK提供的SpellChecker例子程序中的SampleSpellCheckerService类,
下一步,在你的SpellCheckerService子类中,实现下面代码块显示的createSession()和onGetSuggestions()方法,
@Override public Session createSession() { return new AndroidSpellCheckerSession(); } private static class AndroidSpellCheckerSession extends Session { @Override public SuggestionsInfo onGetSuggestions(TextInfo textInfo, int suggestionsLimit) { SuggestionsInfo suggestionsInfo; ... // look up suggestions for TextInfo return suggestionsInfo; } }
注意onGetSuggestions(TextInfo,int)的输入参数textInfo包含了一个单词。此方法返回一个包含建议单词的SuggestionsInfo对象。这个方法的实现能访问你自定义的词典和任何工具类来提取和排列建议单词。
对于句子级别的检查,你可以实现能接受TextInfo数组的onGetSuggestionsMultiple()方法。
为了实现你的子类,你需要在你的manifest文件中声明的你拼写检查器服务。这个声明指定了application、service和定义用于控制设置界面的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> </application> </manifest>
注意这个服务必须要求有android.permission.BIND_TEXT_SERVICE权限,以确保只有系统能绑定到这个服务。
最后一步,为你的拼写检查器创建一个元数据文件用来定义设置拼写检查器的Activity。元数据文件也可以为拼写检查器定义子类型。把这个文件放置在manifest中指定的位置。
在下面的例子中,spellchecker.xml元数据文件指定了SpellCheckerSettingsActivity作为设置Activity,并且包含了子类型来定义拼写检查器可以处理的语言区域。
<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" /> </spell-checker>
现在,你的拼写检查器服务就可以为你的应用程序(例如你的IME)工作了。
为了更快、更精准的拼写检查,Android4.1加入了让客户端一次处理多个句子的API。
在单次调用时,为了让多个句子支持句子级别的检查,只需要重写和实现onGetSentenceSuggestionsMultiple()这个接口就可以了,就像下面显示的:
private static class AndroidSpellCheckerSession extends Session { @Override public SentenceSuggestionsInfo[] onGetSentenceSuggestionsMultiple(TextInfo[] textInfo, int suggestionsLimit) { SentenceSuggestionsInfo[] sentenceSuggestionsInfos; ... // look up suggestions for each TextInfo return sentenceSuggestionsInfos } }
在这种情况下,textInfo是一个TextInfo数组,每一个textInfo都含有一个句子。这个方法把每一个句子的建议语句的长度和偏移作为一个SentenceSuggestionsInfo返回。
如果你想学习更多关于如何使用拼写检查器的API,请查看这些文档和例子:
1. 拼写检查器框架API指南——一个涵盖了拼写检查器客户端和服务端API的开发指南。
2. SampleSpellCheckerService例子程序——帮助你对拼写检查器服务入门。
你可以在/samples/android-15/SpellChecker/SampleSpellCheckerService找到这个程序。
3. HelloSpellChecker例子程序——一个使用拼写检查器的基本程序。
你可以在/samples/android-15/SpellChecker/HelloSpellChecker找到这个程序。
为了学习如何下载Android SDK的例子程序,请看Samples。