在Android中创建一种新的输入法
来源:互联网 发布:淘宝短链接转换 编辑:程序博客网 时间:2024/05/05 00:58
一.
1.创建一个新的输入法需要继承android.inputmethodservice.InputMethodService,这个类提供了一个输入法
的基本实现,例子可以参考sdk中的SoftKeyboard的代码。
2.输入法跟其他application或service一样会被打包成一个apk,在 AndroidManifest.xml,把它声明成一个
service.
3.输入法的service生命周期如下
二.输入法界面元素
输入法有2个主要的界面元素,InputView与Candidates View。
InputView:是用户输入文字的地方,当输入法被显示的时候会调用InputMethodService.onCreateInputView()
,在这个函数里创建和返回你想在输入法窗口中显示的Input View.
Candidates View:是用来提供输入选择,在函数InputMethodService.onCreateCandidatesView()中创建,默认
为空。
三.设计不同的输入类型
一个程序的文本框可能有不同的输入类型,比如字符,数字,url,email地址等,当你实现一种输入法的时候你
就需要知道不同输入方式的区别,输入法不会自动根据不同的输入类型来切换,所以你的输入法需要支持所有的
输入类型。至于输入数据的验证就交由应用程序去负责。
例如,Android中一个Latin输入法提供的字符与数字输入的界面:
调用InputMethodService.onStartInputView()的时候会传递一个 EditorInfo对象来判断输入类型。
例如使用(EditorInfo.inputType & EditorInfo.TYPE_CLASS_MASK)来判断是属于下面的哪种类型:
密码输入:注意不要在你的界面中显示密码,除了提醒用户外也不要把密码保存起来。
四.把输入文本传送给应用程序
1.可以发送一个key event来实现
或者
建议对于一些输入模式使用第一种方法,因为有些按键可能被过滤。
2.通过编辑输入文本,主要使用以下方法。
比如,一个以Fell开头的文本,你想把它替换成Hello!
五.联想输入
如果你需要联想输入或者输入过程中动态预测输入的文本,你可以参考如下代码:
六.拦截硬件按键消息
尽管输入法窗口没有foucs,但是它最先收到硬件的按键消息,如果需要处理这些硬件按键消息,你只需要
重写InputMethodService.onKeyDown() 与InputMethodService.onKeyUp(),如果你不想处理某个按键,记得调
用super.onKey* 。
七.其他注意点
1.提供一个用户可以直接从当前输入法进行相关输入法设置的方式。
2.提供一个用户可以切换不同输入法的方式。
3.让输入法界面尽快的弹出,资源或者耗时长的操作可以稍后加载。
4.当输入法窗口被隐藏的时候,大块的内存分配最好尽快释放
5.确保输入法能包含最常用的字符。
- 在Android中创建一种新的输入法
- 在Android中创建一种新的输入法
- 在Android中创建一种新的输入法
- 在Android中创建一种新的输入法
- 在Android中创建一种新的输入法
- 在Android中创建一种新的输入法(Creating an Input Method))
- 在Android中创建一种新的输入法(Creating an Input Method))
- 在Android中创建一种新的输入法(Creating an Input Method))
- 如何在Latin 输入法中增加一种语言的词库
- 在android中安装输入法替换原有的输入法
- 在myeclipse中创建新的数据库
- 如何在android 开发中创建一个新的XML文件
- 在Android app中切换自定义的输入法
- fragment中使用replace创建新的fragment遇到的层级错乱问题的一种解决方案
- oracle 创建数据库 在新创建的数据库中创建用户 删除创建数据库 链接orcl
- 如何在远程线程中创建新的线程
- 4.如何在LifeRay 中创建新的主题 theme
- 在ILMA中创建一个新的管理用户!
- GET POST 区别详解
- zongjie
- VC++ 设置控件字体,实现不同控件不同字体!
- VBA 错误处理-过滤
- Android编译系统makefile(Android.mk)说明
- 在Android中创建一种新的输入法
- 如何学习C#
- DateTime.ParseExact方法
- 简单的分析一下sencha touch2
- mysql group by
- oracle插入时如何插入uuId
- fedora安装解码器
- 解决Java6.0.29后,Applet不能执行的问题
- sql 中可以实现随机显示的几种方法对比