没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
17页
本文将以Android Sample中经典的SoftKeyboard项目为例,详细解析Android上一个小型项目的开发过程和注意事项。章节如下:一、IMF简介 二、创建Eclipse工程 三、配置和...更多>> 本文将以Android Sample中经典的SoftKeyboard项目为例,详细解析Android上一个小型项目的开发过程和注意事项。章节如下:一、IMF简介 二、创建Eclipse工程 三、配置和资源文件解析 四、源代码解析 五、输入法调试 六、输入法的调用
资源推荐
资源详情
资源评论
no Pain no Gain no Gavin 博客同步更新至:http://blog.sina.com.cn/deaboway http://blog.csdn.net/deaboway
最近工作比较忙,加班出差,因此更新慢了些。今天刚好有空,写一篇实例
详解吧。
本博前面的文章介绍了 Android 开发环境的搭建和模拟器的常用操作。本
次,将以 Android Sample 中经典的 SoftKeyboard 项目为例,详细解析 Android 上一
个小型项目的开发过程和注意事项。
从 SDK 1.5 版本以后,Android 就开放它的 IMF(Input Method
Framework),让我们能够开发自己的输入法。而开发输入法最好的参考就是
Android 自带的 Sample-SoftKeyboard,虽然这个例子仅包含英文和数字输入,但是
它本身还算完整和清楚,对我们开始 Android 开发实战有很大帮助。
一、IMF 简介
一个 IMF 结构中包含三个主要的部分:
input method manager:管理各部分的交互。它是一个客户端 API,存在于各
个应用程序的 context 中,用来沟通管理所有进程间交互的全局系统服务。
input method(IME):实现一个允许用户生成文本的独立交互模块。系统绑定
一个当前的输入法。使其创建和生成,决定输入法何时隐藏或者显示它的 UI。同
一时间只能有一个 IME 运行。
client application:通过输入法管理器控制输入焦点和 IME 的状态。一次只能
有一个客户端使用 IME。
1、InputManager
由 UI 控件(View,TextView,EditText 等)调用,用来操作输入法。比如,打
开,关闭,切换输入法等。
它是整个输入法框架(IMF)结构的核心 API,处理应用程序和当前输入法的
交互。可以通过 Context.getSystemService()来获取一个 InputMethodManager 的实
例。
在开发过程中,最基础最重要的就是养成阅读 API 的习惯。优秀的程序员要
养成把自己关在小黑屋里,断绝与外界的联网和联系,仅仅靠自己电脑中的开发环
境和 API 文档,以及漂亮女仆送来的每天三顿饭,写出优秀的程序。这个在武侠
小说中叫闭关,在软件开发中叫 Clean Room,哈哈。
Android 的 API 文档在:%SDK_ROOM%/docs/reference/index.html,
InputManager 类的位置:
%SDK_ROOM%/docs/reference/android/view/inputmethod/InputMethodManager.html
由于,该类跟本次要讲的 Sample 关系不大,这里就不详细分析,请各位自行
阅读 API doc 吧。
2、InputMethodService
包括输入法内部逻辑,键盘布局,选词等,最终把选出的字符通过
commitText 提交出来。实现输入法的基础就是名为 InputMethodService 的类,比
如你要实现一个谷歌输入法,就是要 extends 本类。我们接下来要学习的
1
no Pain no Gain no Gavin 博客同步更新至:http://blog.sina.com.cn/deaboway http://blog.csdn.net/deaboway
SoftKeyboard Sample 也是 extends 本类。InputMethodService 类的位置在:
%SDK_ROOM%/docs/reference/android/inputmethodservice/InputMethodService.html
InputMethodService 是 InputMethod 的一个完整实现,你可以再在其基础上扩
展和定制。它的主要方法如下:
z onInitializeInterface() 顾名思义,它在初始化界面的时候被调用,而一般
是由于配置文件的更改导致该函数的执行
z onBinndInput() 它在另外的客户端和该输入法连接时调用
z onStartInput() 非常重要的一个回调,它在编辑框中用户已经开始输入的时
候调用。比如,当点击一个输入框,我们需要根据这个输入框的信息,设
置输入法的一些特性,这个在 Sample 中很有体会。
z onCreateInputView() 返回一个层次性的输入视图,而且只是在这个视图第
一次显示的时候被调用
z onCreateCandidatesView() 同 onCreateInputView(),只不过创建的是候选框
的视图。
z onCreateExtractTextView() 比较特殊,是在全屏模式下的一个视图。
z onStartInputView() 在输入视图被显示并且在一个新的输入框中输入已经
开始的时候调用。
基本上输入法的定制,都是围绕在这个类来实现的,它主要提供的是一个基
本的用户界面框架(包括输入视图,候选词视图和全屏模式),但是这些都是要实
现者自己去定制的。这里的实现是让所有的元素都放置在了一个单一的由
InputMethodService 来管理的窗口中。它提供了很多的回调 API,需要我们自己去
实现。一些默认的设置包括:
z 软键盘输入视图,它通常都是被放置在屏幕的下方。
z 候选词视图,它通常是放置在输入视图的上面。
z 当我们输入的时候,需要改变应用程序的界面来适应这些视图的放置规
则。比如在 Android 上面输入,编辑框会自动变形腾出一个软键盘的位置
来。
两个非常重要的视图:
1. 软输入视图。是与用户交互的主要发生地:按键,画图或者其他的方
式。通常的实现就是简单的用一个视图来处理所有的工作,并且在调
用 onCreateInputView()的时候返回一个新的实例。通过调用系统的
onEvaluateInputViewShow()来测试是否需要显示输入视图,它是系统
根据当前的上下文环境来实现的。当输入法状态改变的时候,需要调
用
updateInputViewShown()来重新估计一下。
2. 候选词视图。当用户输入一些字符之后,输入法可能需要提供给用户
一些可用的候选词的列表。这个视图的管理和输入视图不大一样,因
为这个视图是非常的短暂的,它只是在有候选词的时候才会被显示。
可以用 setCandidatesViewShow()来设置是否需要显示这个视图。正是
2
no Pain no Gain no Gavin 博客同步更新至:http://blog.sina.com.cn/deaboway http://blog.csdn.net/deaboway
因为这个显示的频繁性,所以它一般不会被销毁,而且不会改变当前
应用程序的视图。
最后,关于文本的产生,这是一个 IME 的最终目的。它通过 InputConnection
来链接 IME 和应用程序的:能够直接产生想要的按键信息,甚至直接在候选和提
交的文本中编辑。当用户在不同的输入目标之间切换的时候,IME 会不断的调用
onFinishInput() 和 onStartInput()。在这两个函数中,需要反复做的就是复位状态,
并且应对新的输入框的信息。
以上是一个输入法的最基本的介绍,下面将根据 Sample 中的 SoftKeyboard 来
说明这些问题。
二、创建 Eclipse 工程
这里使用最新版本的 Android SDK 2.3.3 下的 SoftKeyboard Sample 来创建工
程,其实,从 1.5 版本,该 Sample 就已经存在了。同时,由于 SoftKeyboard 会使
人误解为 KeyBoard 的子类,这里特别改名为 InputMethodServiceSample,更符合
其功能和特性。
3
no Pain no Gain no Gavin 博客同步更新至:http://blog.sina.com.cn/deaboway http://blog.csdn.net/deaboway
点击 Finish,完成项目的创建,可以看到项目工程结构如下:
在 Android SDK 2.3.3 模拟器上运行本 Sample,需要在 Setting 中选择使用本
Sample,需要在 Language&keyboard 中选中本 Sample 的名称。
4
剩余16页未读,继续阅读
周三径
- 粉丝: 303
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页