您的位置:首页 > 移动开发 > Android开发

自定义布局的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,比如,该视图可以接收的字符,并自动把字符转换为图片。

  总之,凡是你能设想的,标准输入法中没有实现的,都可以考虑实现自定义输入法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android input 输入法