自定义布局的IMS
2015-08-31 17:43
267 查看
什么是自定义输入法?简单的讲,如果你编写的输入法不是基于InputMethodService或者AbstractInputMethodService类,而是完全重新实现IInputMethodService.aidl中定义的Binder接口,那么就可以认为这是一个自定义输入法。
IMF的本质是几个Binder在交互信息,至于如何实现这些Binder,IMF本身并没有规定。其中介绍的InputMethodService只是为了方便设计而提供的一种实现实例,因此从严格意义上讲,实现一个自定义输入法意味着要实现这些Binder接口,具体包括以下三个。
InputMethod接口:当输入法所在的Service被启动时,必须在其onBind()函数中返回一个该Binder接口,在标准输入法中,返回的是IInputMethodWrapper类对象。
InputMethodSession接口:当IMMS调用输入法所在Service的createSession()方法时,必须返回一个该Binder接口,在标准输入法中,返回的是IInputMethodSessionWrapper对象。
InputContext接口:当IMM调用IMMS的startInput()时,参数中需要包含该Binder对象,而该Binder对象是在IMM中创建的,名称为ControlledInputConnectionWrapper。这个Binder对象本身是不能自定义的,但该Binder对象是通过一个InputConnection接口构造的,而这个InputConnection接口的实现却可以自定义。在标准输入法中,该接口的实现类为EditableInputConnection类。
到目前为止,国内主流的输入法包括Android自带的Google拼音输入法、HTC的中文Touch手写输入法、搜狗拼音输入法,而这些输入法全部属于标准输入法。
那么为什么要实现自定义的输入法呢?
如果你对标准输入法窗口的那种“输入区”、“候选区”、“提取区”的布局不满意,并想设计一种该布局无法满足的布局,那么可以考虑实现自定义输入法。比如,设想一种没有候选区,或者候选区会嵌套到输入区中的布局,如下图所示。
该输入法的设想是,当用户输入中文时,可以在目标词语对应的首字母处画一个路径。比如输入“葛永娇”时,只需要在G、Y、J三个字母处画一个路径,然后在屏幕的中央就会出现备选词语,这种输入法超越了标准输入法的框架,因此可以考虑为自定义输入法。
如果你对标准输入法中的那种调用逻辑不满意,想设计一种更为简单的输入法,比如,该输入法可能只是为了输入某种特定的数据。
如果你想设计一种自定义的视图,类似于EditView,但是却不是EditView,比如,该视图可以接收的字符,并自动把字符转换为图片。
总之,凡是你能设想的,标准输入法中没有实现的,都可以考虑实现自定义输入法。
IMF的本质是几个Binder在交互信息,至于如何实现这些Binder,IMF本身并没有规定。其中介绍的InputMethodService只是为了方便设计而提供的一种实现实例,因此从严格意义上讲,实现一个自定义输入法意味着要实现这些Binder接口,具体包括以下三个。
InputMethod接口:当输入法所在的Service被启动时,必须在其onBind()函数中返回一个该Binder接口,在标准输入法中,返回的是IInputMethodWrapper类对象。
InputMethodSession接口:当IMMS调用输入法所在Service的createSession()方法时,必须返回一个该Binder接口,在标准输入法中,返回的是IInputMethodSessionWrapper对象。
InputContext接口:当IMM调用IMMS的startInput()时,参数中需要包含该Binder对象,而该Binder对象是在IMM中创建的,名称为ControlledInputConnectionWrapper。这个Binder对象本身是不能自定义的,但该Binder对象是通过一个InputConnection接口构造的,而这个InputConnection接口的实现却可以自定义。在标准输入法中,该接口的实现类为EditableInputConnection类。
到目前为止,国内主流的输入法包括Android自带的Google拼音输入法、HTC的中文Touch手写输入法、搜狗拼音输入法,而这些输入法全部属于标准输入法。
那么为什么要实现自定义的输入法呢?
如果你对标准输入法窗口的那种“输入区”、“候选区”、“提取区”的布局不满意,并想设计一种该布局无法满足的布局,那么可以考虑实现自定义输入法。比如,设想一种没有候选区,或者候选区会嵌套到输入区中的布局,如下图所示。
该输入法的设想是,当用户输入中文时,可以在目标词语对应的首字母处画一个路径。比如输入“葛永娇”时,只需要在G、Y、J三个字母处画一个路径,然后在屏幕的中央就会出现备选词语,这种输入法超越了标准输入法的框架,因此可以考虑为自定义输入法。
如果你对标准输入法中的那种调用逻辑不满意,想设计一种更为简单的输入法,比如,该输入法可能只是为了输入某种特定的数据。
如果你想设计一种自定义的视图,类似于EditView,但是却不是EditView,比如,该视图可以接收的字符,并自动把字符转换为图片。
总之,凡是你能设想的,标准输入法中没有实现的,都可以考虑实现自定义输入法。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件