下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android技术专题系列之七输入法框架Android的输入法框架比价复杂。从进程的角度来讲,相关功能主要分布在下面三个位置:客户端应用是一个包含有图形界面的应用,如地址本。图形界面上包含有能够接收输入的编辑框,如TextView。输入法模块提供软键盘,将用户在软键盘上的按键输入根据某种算法(如Zi, T9, 国笔等)转换成单词,然后传递给客户端应用。目录development/samples/SoftKeyboard下提供了一个输入法模块实例。如果想要实现一个中文输入法,可参考这个实例。平台部分实现一些管理功能,负责装载某个输入法模块,启动,终止该模块等。相关代码主要位于下面几个位置。其中,
2、位于3,5,6,7目录下的代码最值得关注。1. frameworks/base/core/java/com/android/internal/view这个目录下定义了几个重要的idl 接口。IInputMethod.aidl 定义了IInputMethod idl 接口,用于客户端跨进程操作InputMethod接口。IInputMethodSession.aidl 定义了IInputMethodSession接口,是IInputMethod的辅助接口。用于客户端跨进程操作InputMethodSession接口。IInputMethodCallback.aidl定义了一个helper 接口,
3、由客户端实现。IInputMethod.aidl和IInputMethodSession.aidl实例可以分别调用该接口中的不同方法IInputMethodManager.aidl 定义了Input Method Manager的service接口。客户端通过InputMethodManager interface调用这个service。InputMethodManagerService.java实现了IInputMethodManager.aidl接口IInputMethodClient.aidl定义接口,标识一个Input Method Manager 的客户。这个service在客户端实
4、现,提供给server端调用。IInputContext.aidl定义了一个接口,由客户端提供InputMethod使用。InputMethod可以与客户端交互,调用客户端提供的callback。IInputConnectionWrapper.java 实现了IInputContext接口。IInputContextCallback.aidl定义了一个接口,定义了一组callback函数给IInputContext.aidl实例调用,从客户端返回信息给InputMethod。InputConnectionWrapper.java实现了IInputContextCallback接口。2. fra
5、meworks/base/services/java/com/android/serverInputMethodManagerService.java实现了IInputMethodManager.aidl接口3. frameworks/base/core/java/android/view/inputmethod这个目录下定义了几个重要的interface和类。InputMethodManager.java实现了InputMethodManager 类。此类调用IInputMethodManager.aidl接口功能,而IInputMethodManager.aidl接口功能由InputMet
6、hodManagerService.java实现,并运行在不同于客户端进程的server进程中。InputConnection.java定义了InputConnection interface。InputConnection 接口在输入法和客户端之间建立了一个连接,输入法可以使用该连接获取或发送信息给客户端。InputConnection实例由客户端创建之后传递给输入法使用。BaseInputConnection.java 实现了InputConnection接口的一个基类: BaseInputConnection。 EditableInputConnection.java实现了一个派生类In
7、putBinding.java 定义了类InputBinding,这个类实现了parcelable 接口。这个类的成员变量包含了客户端传向server的信息。InputMethod.java定义了InputMethod interface。文件InputMethodService.java中类InputMethodImpl实现了这个接口。这个接口定义了一套操纵一个输入法的方法。如,createSession,startInput等。要编写一个具体输入法的话,就需要派生这个接口。InputMethodSession.java定义了InputMethodSession接口。文件InputMetho
8、dService.java中类InputMethodSessionImpl实现了这个接口。InputMethodSession是InputMethod的辅助接口,用于具体和某个输入法客户端交互。CompletionInfo.java 类描述一个text completion.EditorInfo.java类描述一个接收输入的view的属性,如内容属性(text, digit, etc)。ExtractedText.java类描述从view中提取的传递给输入法的文本属性。4. frameworks/base/core/java/com/android/internal/widgetEditabl
9、eInputConnection.java实现了BaseInputConnection的一个派生类。5. frameworks/base/core/java/android/inputmethodservice这个目录下的代码提供了实现一个具体输入法的框架类。从这些类派生,就可以定制一个输入法。SoftInputWindow.java中的SoftInputWindow类是一个Dialog子类。它代表一个输入法的顶级窗口(由窗口管理器管理),这个窗口由上到下,包含extractArea, candidatesArea, 和 inputArea。Keyboard.java 中的Keyboard类装
10、载并解析一个描述虚拟键盘(Soft Keyboard)的xml文件(如development/samples/SoftKeyboard/res/xml),并存储该键盘的属性,如该虚拟键盘包含多上行,每行有哪些键等。KeyboardView.java 中的KeyboardView类是一个View子类。它根据Keyboard数据结构真正的在screen上画出一个虚拟键盘。这个虚拟键盘就是SoftInputWindow中的inputArea。AbstractInputMethodService是Service的派生类,并实现了KeyEvent.Callback 接口。实现了InputMethod 和
11、 InputMethodSession的基类。dispatchKeyEvent 函数将收到的key event传给相应的key 处理函数(在派生类中实现)。当这个service被客户端绑定时,其onBind()函数给客户端返回了一个IInputMethodWrapper实例,这个实例实现了IInputMethod idl接口。客户端可以使用该接口的相关功能。IInputMethodWrapper.java 实现了IInputMethod idl 接口。这个类收到客户端的跨进程命令后,调用InputMethod完成相应功能。IInputMethodSessionWrapper.java 实现了I
12、InputMethodSession idl接口。这个类收到客户端的跨进程命令后,调用InputMethodSession完成相应功能。6. /home/azingo/mydroid/frameworks/base/core/res/res/layout这个目录下存放着一些系统资源。其中,input_method.xml描述了一个输入法的窗口(即SoftInputWindow)布局,从上往下,依次排列extractArea, candidatesArea 和 inputArea。input_method_extract_view.xml。7. development/samples/SoftK
13、eyboard这个目录下代码实现了一个的输入法实例软键盘英文数字输入法。这里面实现的类大都是从frameworks/base/core/java/android/inputmethodservice 中的类派生而来。AndroidManifest.xml:描述这个.apk提供的service以及关于这个输入法的一些信息。res/xml/目录下存储着几个描述不同虚拟键盘的xml文件。LatinKeyboard.java中的LatinKeyboard类是Keyboard的子类。LatinKeyboardView.java中的LatinKeyboardView类是KeyboardView的子类。8. frameworks/base/core/java/android/widget在这里TextView.java是使用Input Method Framework (IMF)的客户端。TextView创建了一个InputMethodManager的实例并调用其restartInput 函数。InputMethodManager:restartInput函数创建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 灌排泵站运行工跨领域知识考核试卷含答案
- 露天采矿吊斗铲司机发展趋势强化考核试卷含答案
- 中国煤炭物流行业发展现状及市场前景分析预测报告
- 《给排水科学与工程概论 第4版》课件全套 第1-8章 绪论-智慧水务与水厂的自动控制
- 设备安装监理实施细则
- 全国计算机等级考试(NCRE)三级数据库技术样题及参考答案
- 垃圾分类普及教育课件
- c30混凝土路面施工方案(完-整版)
- 2026年班组安全生产管理培训试题(含答案)
- 专利悬崖期L天冬酰胺仿制药原料市场的博弈与机会
- AI搜索时代长文为什么没用:一份17.4万页面研究揭示的AEO真相
- 2026年淮北安徽相润投资控股集团有限公司公开社会招聘15名补充考试参考题库及答案详解
- 2026年秋大象版(新教材)小学科学四年级上册教学计划及进度表
- 2026秋小学科学教科版六年级上册(新教材)教学计划附进度表
- 安徽合肥长丰县2026年村(社区)后备干部招聘考试【结构化面试题库+高分答题模板】(含考官评分要点)
- 中国空间技术研究院招聘笔试题库2026
- 确认参会人信息的确认函(7篇范文)
- 中国ABS塑料行业深度调研及投资前景预测研究报告
- 2026及未来5年中国工业脱水机行业发展研究报告
- 建筑施工消防应急演练方案
- 2026年成都市中考物理试卷(含答案)
评论
0/150
提交评论