原文:http://android.eoe.cn/topic/android_sdk

拼写检查器框架

Android平台提供了一个拼写检查器的框架,来方便你在你的应用中实现并使用拼写检查。这个框架是Android平台提供的文字服务API之一。

要在你的应用中使用该框架,你需要创建一个特殊的AndroidService来生成一个拼写检查器会话对象。这个会话对象会基于你提供的文字,来返回拼写检查器生成的拼写建议。

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

http://developer.android.com/resources/articles/images/spellcheck_lifecycle.png

图1.拼写检查器服务的生命周期。

为了初始化拼写检查,你的应用必须实现它自己的拼写检查器服务。你应用中的客户端,比如activity,或是独立的UI元素,需要从服务中获取一个拼写检查器会话,然后使用该会话为文本获取拼写建议。当一个客户端停止它的活动时,它结束自己的会话。你的应用可以在必要时,随时关闭拼写检查器服务。

为了在你的应用中使用拼写检查器框架,你需要添加一个包含会话对象实现的拼写检查器服务组件。你也可以为你的应用增加一个可选的activity来控制设置。你也必须添加一个元数据xml文件来描述拼写检查器服务,并在manifest文件中增加适当的元素。

拼写检查类。

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

一个SpellCheckerService的子类。
:SpellCheckerService实现了Service类和拼写检查器框架接口,在你的子类中,你必须实现以下方法:

:createSession())
::这是一个工厂方法,它为客户端返回一个 SpellCheckerService.Session 对象来实现拼写检查。
:查看Spell Checker Service样例应用,来学习更多实现该类的知识。

一个SpellCheckerService.Session的实现。
:这是一个拼写检查器服务给客户提供的对象,来让他们把文字传递给拼写检查器并接收提示。在这个类里,你必须实现以下方法:
:onCreate())
::这是createSession())的系统回调函数,在这个方法中,你可以基于本地化以及其它内容,初始化SpellCheckerService.Session对象。
:[http://developer.android.com/reference/android/service/textservice/SpellCheckerService.Session.html#onGetSentenceSuggestionsMultipleandroid.view.textservice.TextInfo[](, int) onGetSentenceSuggestionsMultiple()]
::该函数真正来进行拼写检查,它返回一个SentenceSuggestionsInfo数组,该数组包含了传入句子的提示。
:你也可以实现一些可选的函数,比如onCancel())是用来处理取消拼写检查的请求,int) onGetSuggestions()是用来处理一个词提示请求,或者int) onGetSuggestionsMultiple()是用来处理一组词的提示的请求。

:查看Spell Checker Service例子应用来学习更多。

注意:你必须把拼写检查设为异步和线程安全的。一个拼写检查器可能被在不同核心上的不同的线程同时调用。SpellCheckerService 和 SpellCheckerService.Session自动实现了上述要求。

拼写检查器的声明和元数据

除了代码以外,你需要为拼写检查器提供合适的manifest文件和元数据文件。

mainifestt文件定义了应用,服务,以及用于设置的活动,如下示:

 1
2
3
4
5
6
7
8
9
10
11
12
13
        <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>

注意想要使用该服务的组件需要使用BIND_TEXT_SERVICE的许可来确保系统绑定该服务。该服务的定义中还确定了spellchecker.xml元数据文件,这将在下一节给出。

元数据文件spellchecker.xml的内容如下:

元数据里确定了拼写检查器用于控制设置的activity。它还定义了拼写检查器的子类;在这种情况下,子类定义了拼写检查器适用的地区。

使用TextView视图应用自动获取拼写检查,因为TextView会自动使用一个拼写检查器。如下截图所示:

http://developer.android.com/resources/articles/images/textview_spellcheck_screenshot_2.png

图2.TextView中的拼写检查

然而在其它情况下,你可能也想要直接与拼写检查器服务进行交流。如下图表是直接与拼写检查器交流的控制流程:

http://developer.android.com/resources/articles/images/spellcheck_client_flow.png

图3.与一个拼写检查器服务交互。

Spell Checker Service例子应用,将教你如何与一个拼写检查服务进行交互。Android Open Source Project里的LatinIME输入法编辑器里也有一个拼写检查的例子。

Android基础知识之拼写检查框架的更多相关文章

  1. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  2. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  3. Android基础知识(一)

    前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...

  4. Android基础知识巩固:关于PendingIntent和广播

    平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...

  5. android开发学习---linux下开发环境的搭建&& android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  6. Android基础知识之API等级介绍

    原文:http://android.eoe.cn/topic/android_sdk :可以让开发者通过一个表示API级别的整数来描述程序在android平台上的兼容性,系统会将与系统本身提供的API ...

  7. 看看android基础知识,谁帮我作答

    无论怎么着,了解一点android的基本知识还是有必要的,就当开阔一些自己的眼界吧. .. . android的四大功能组件是_activity_,_service_,_BroadcastReceiv ...

  8. Android基础知识学习

    IPC  (Inter-Process Communication) 意思是: 进程间的通信,是指两个进程之间进行数据交换的过程. Android中如何开启多进程呢? 只需要给四大组件(Activit ...

  9. android基础知识:SharedPreferences和PreferenceActivity

    1.android文件存储 对Android系统了解的都知道,Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvi ...

随机推荐

  1. 写出3个使用this的典型应用

    (1).在html元素事件属性中使用,如: <input type=”button” onclick=”showInfo(this);” value=”点击一下” /> (2).构造函数 ...

  2. Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6403033.html 在项目中的应用见: https://github.com/ygj0930/CoupleS ...

  3. jump-game i&&ii 能否跳出区间 贪心

    I: Given an array of non-negative integers, you are initially positioned at the first index of the a ...

  4. java AES加密、解密(兼容windows和linux)

      java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...

  5. 〖前端开发〗HTML/CSS基础知识学习笔记

    经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> & ...

  6. weblogic服务目录迁移记录

    weblogic服务,由于前期的规划不好,导致后期有点问题!为了更加规范运行服务及执行相关操作,故进行服务迁移... 先决条件:weblogic都是单个aminserver运行的,单个服务 问题解决: ...

  7. C#实现多文件上传,写到文件夹中,获取文件信息以及下载文件和删除文件

    前台:.js //上传附件 function uploadAttachment() { if ($("#Tipbind").attr('checked')) { var ip = ...

  8. ios中网络请求缓存

    #import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" @protocol NetWorkde ...

  9. PHP-SESSION深入理解

    1.浏览器窗口与SESSION间的关系 记得去年的时候网上抢手机(你懂的), 特意开两个窗口, 哪个进度快用哪个.如此到输入验证码的时候老是出错, 结果----没抢到~ 后来写了个程序, 如下: &l ...

  10. 【C++】不要想当然使用resize

    #include <iostream> // std::cout #include <vector> // std::vector using namespace std; i ...