`
quanminchaoren
  • 浏览: 926203 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android InputMethod设置

阅读更多

Android的输入法框架比价复杂。从进程的角度来讲,相关功能主要分布在下面三个位置:
Android <wbr>技术专题系列之七 <wbr>-- <wbr>输入法 <wbr>框架

客户端应用是一个包含有图形界面的应用,如地址本。图形界面上包含有能够接收输入的编辑框,如TextView。
输入法模块提供软键盘,将用户在软键盘上的按键输入根据某种算法(如Zi, T9, 国笔等)转换成单词,然后传递给客户端应用。目录development/samples/SoftKeyboard下提供了一个输入法模块实例。如果想要实现一个中文输入法,可参考这个实例。
平台部分实现一些管理功能,负责装载某个输入法模块,启动,终止该模块等。
相关代码主要位于下面几个位置。其中,位于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 接口,由客户端实现。IInputMethod.aidl和IInputMethodSession.aidl实例可以分别调用该接口中的不同方法

IInputMethodManager.aidl 定义了Input Method Manager的service接口。客户端通过InputMethodManager interface调用这个service。
InputMethodManagerServic

e.java实现了IInputMethodManager.aidl接口

IInputMethodClient.aidl定义接口,标识一个Input Method Manager 的客户。这个service在客户端实现,提供给server端调用。

IInputContext.aidl定义了一个接口,由客户端提供InputMethod使用。InputMethod可以与客户端交互,调用客户端提供的callback。
IInputConnectionWrapper.java 实现了IInputContext接口。
IInputContextCallback.aidl定义了一个接口,定义了一组callback函数给IInputContext.aidl实例调用,从客户端返回信息给InputMethod。
InputConnectionWrapper.java实现了IInputContextCallback接口。

2. frameworks/base/services/java/com/android/server
InputMethodManagerService.java实现了IInputMethodManager.aidl接口

3. frameworks/base/core/java/android/view/inputmethod
这个目录下定义了几个重要的interface和类。
InputMethodManager.java实现了InputMethodManager 类。此类调用IInputMethodManager.aidl接口功能,而IInputMethodManager.aidl接口功能由InputMethodManagerService.java实现,并运行在不同于客户端进程的server进程中。

InputConnection.java定义了InputConnection interface。InputConnection 接口在输入法和客户端之间建立了一个连接,输入法可以使用该连接获取或发送信息给客户端。InputConnection实例由客户端创建之后传递给输入法使用。BaseInputConnection.java 实现了InputConnection接口的一个基类: BaseInputConnection。 EditableInputConnection.java实现了一个派生类

InputBinding.java 定义了类InputBinding,这个类实现了parcelable 接口。这个类的成员变量包含了客户端传向server的信息。

InputMethod.java定义了InputMethod interface。文件InputMethodService.java中类InputMethodImpl实现了这个接口。这个接口定义了一套操纵一 个输入法的方法。如,createSession,startInput等。要编写一个具体输入法的话,就需要派生这个接口。

InputMethodSession.java定义了InputMethodSession接口。文件InputMethodService.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/widget
EditableInputConnection.java实现了BaseInputConnection的一个派生类。

5. frameworks/base/core/java/android/inputmethodservice
这个目录下的代码提供了实现一个具体输入法的框架类。从这些类派生,就可以定制一个输入法。
SoftInputWindow.java中的SoftInputWindow类是一个Dialog子类。它代表一个输入法的顶级窗口(由窗口管理器管理),这个窗口由上到下,包含extractArea, candidatesArea, 和 inputArea。

Keyboard.java 中的Keyboard类装载并解析一个描述虚拟键盘(Soft Keyboard)的xml文件(如development/samples/SoftKeyboard/res/xml),并存储该键盘的属性,如该虚拟键盘包含多上行,每行有哪些键等。
KeyboardView.java 中的KeyboardView类是一个View子类。它根据Keyboard数据结构真正的在screen上画出一个虚拟键盘。这个虚拟键盘就是SoftInputWindow中的inputArea。

AbstractInputMethodService是Service的派生类,并实现了KeyEvent.Callback 接口。实现了InputMethod 和 InputMethodSession的基类。dispatchKeyEvent 函数将收到的key event传给相应的key 处理函数(在派生类中实现)。当这个service被客户端绑定时,其onBind()函数给客户端返回了一个IInputMethodWrapper实例,这个实例实现了IInputMethod idl接口。客户端可以使用该接口的相关功能。

IInputMethodWrapper.java 实现了IInputMethod idl 接口。这个类收到客户端的跨进程命令后,调用InputMethod完成相应功能。
IInputMethodSessionWrapper.java 实现了IInputMethodSession idl接口。这个类收到客户端的跨进程命令后,调用InputMethodSession完成相应功能。


6. frameworks/base/core/res/res/layout
这个目录下存放着一些系统资源。其中,
input_method.xml描述了一个输入法的窗口(即SoftInputWindow)布局,从上往下,依次排列extractArea, candidatesArea 和 inputArea。
input_method_extract_view.xml。

7. development/samples/SoftKeyboard
这个目录下代码实现了一个的输入法实例--软键盘英文/数字输入法。这里面实现的类大都是从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函数创建了一个InputConnection 实例并调用IInputMethodManager::startInput。
IInputMethodManager::startInput 函数使用mContext.bindService启动一个InputMethod service, 如 Sample Soft Keyboard。

9. frameworks/base/core/java/com/android/internal/widget
分享到:
评论

相关推荐

    Android InputMethod 源码流程图

    在Android系统中,InputMethod(简称IME)是用户与设备交互的重要组成部分,它负责处理文本输入,例如在软键盘上键入文字。Android InputMethod源码流程图涉及到多个关键步骤和组件之间的交互,这些组件包括...

    谷歌拼音输入法安卓版com.google.android.inputmethod.pinyin_4.5.2.193126728.apk

    谷歌拼音输入法安卓版是谷歌官方推出适用于专为android安卓系统制订的手机输入法。全新谷歌手机输入法具有视觉上质感样式的输入法界面,去掉了键帽的设计,没有了分割的线条,给人一种更加简单、纯粹、统一的感觉,...

    MOTO 4.1.2 Input Method

    【描述】"MOTO 4.1.2 Input Method"可能是摩托罗拉对原生Android 4.1.2系统输入法的定制版,旨在提升用户在操作手机时的打字效率和准确性。在这个版本中,摩托罗拉可能引入了特定的改进,比如更符合人体工程学的按键...

    inputmethod

    标题中的“inputmethod”指的是Android系统中的输入法组件,它负责在用户与设备交互时提供文本输入的功能。在Android平台上,InputMethod服务允许开发者创建自定义的输入法,如拼音、手写、语音等,以满足不同用户的...

    com.google.android.inputmethod.pinyin-4.5.1.164561151-x86-4511414.apk

    公司内网,没有互联网,androidStudio自带输入法没发联网安装中文输入法,最开始在网上找到sougou_x86_221的apk,使用过程中中英文切换有问题,搞不懂切换逻辑.后来又找到了apk,亲测可用.支持我的话从这里下载,分不够的话...

    android sdk android-34

    通过设置SDK路径,开发者可以在项目中指定目标API级别,确保应用能在不同版本的Android设备上正常运行。同时,持续关注并学习新的SDK版本更新,可以帮助开发者保持技术的前沿性,利用最新功能提升应用质量。

    trime:同文安卓输入法平台3.xAndroid-rimeRime Input Method Engine for Android

    同文安卓输入法平台/Trime: Rime IME for Android关于/About源于开源的下载/Download稳定版 测试版配置文件鸣谢/Credits开发:贡献:维基翻译:天真可爱的满满(繁体中文)、点解(英文)键盘:天真可爱的满满、皛筱...

    android开发textview属性详情

    3. android:inputMethod:指定文本的输入法,例如 com.google.android.inputmethod.pinyin。 4. android:inputType:设置文本的类型,例如 phone、email、text 等,以便输入法显示合适的键盘类型。 三、文本显示...

    InputMethodManagerTest

    【InputMethodManagerTest】是关于Android系统中输入法管理器(InputMethodManager)的测试与实践,主要涉及`InputMethod`、`Activity`以及`requestCode`和`resultCode`等关键概念。在Android开发中,输入法管理器是...

    Android IMF输入法总结

    IMF 的实现需要了解 Android 的输入法架构,包括 Input Method Manager (IMM)、Input Method (IME) 和 Client Applications 的交互。同时,需要了解 InputMethodManager 和 InputMethodManagerService 的作用和实现...

    简单可用的 基于web的 android 拼音输入法 pinyin input method.zip

    【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 ... 【项目质量】: 所有源码都经过严格测试,...

    MultiClientInputMethod for Android 安卓多屏输入法.zip

    After studying the multi-screen inputmethod for a long time, I finally came up with a usable demo设置该输入法调起前需要按步骤执行命令哦You need to follow the steps to execute the command before ...

    Android代码-通过Hook实现系统软键盘监听

    &gt; A keyboard listener for Android which by hooking the InputMethodManager. Of course you can also hook the other system services similarly, If you want, create a class, make it a subclass of Hook, and...

    Android代码-笔顺五码中文输入法

    Stroke5 Chinese Input Method for Android This is an implementation of Stroke5 Chinese Input Method for elders and kids on Android Platform. For More information you can find in here: ...

    android权限设置大全

    * android.permission.BIND_INPUT_METHOD:请求InputMethodService服务,只有系统才能使用。 蓝牙权限 * android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备。 * android.permission.BLUETOOTH_ADMIN:...

    Android 输入法框架

    IInputContextCallback.aidl 定义了一个接口,定义了一组 callback 函数给 IInputContext.aidl 实例调用,从客户端返回信息给 InputMethod。InputConnectionWrapper.java 实现了 IInputContextCallback 接口。 在 ...

    android输入法原理分析

    当收到新输入法安装的消息时,IMMS会查询PackageManager以获取声明为InputMethod的程序,并将其添加到可用输入法列表中。 - **输入法切换**:用户可以在IMMS提供的列表中选择不同的输入法,IMMS会处理输入法的激活...

Global site tag (gtag.js) - Google Analytics