Платформа Android предлагает фреймворк проверки правописания, который позволяет реализовать и получить доступ к проверке правописания в вашем приложении. Фреймворк является одним из API текстовых сервисов.
Чтобы использовать фреймворк в приложении, создайте сервис Android, который генерирует объект сеанса проверки правописания. На основе предоставленного вами текста объект сеанса возвращает исправления правописания, сгенерированные средством проверки правописания.
Жизненный цикл проверки правописания
На следующей диаграмме показан жизненный цикл сервиса проверки правописания:
Чтобы запустить проверку правописания, приложение запускает реализацию сервиса проверки правописания. Клиенты в вашем приложении, такие как действия или отдельные элементы пользовательского интерфейса, запрашивают у сервиса сеанс проверки правописания, а затем используют его для получения предложений по тексту. Когда клиент завершает работу, он закрывает сеанс проверки правописания. При необходимости приложение может в любой момент отключить сервис проверки правописания.
Как реализовать сервис проверки правописания
Чтобы использовать фреймворк проверки правописания в приложении, добавьте компонент сервиса проверки правописания, который включает определение объекта сеанса. Вы также можете добавить в приложение необязательное действие, которое управляет настройками. Добавьте 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 автоматически используется средство проверки правописания:
EditText.
Однако в некоторых случаях может потребоваться напрямую взаимодействовать с сервисом проверки правописания. На следующей диаграмме показан поток управления для взаимодействия с сервисом проверки правописания.
Пример проверки правописания можно найти в редакторе метода ввода LatinIME в Android Open Source Project.