一.

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)来判断是属于下面的哪种类型:

TYPE_CLASS_NUMBER

TYPE_CLASS_DATETIME

TYPE_CLASS_PHONE

TYPE_CLASS_TEXT

密码输入:注意不要在你的界面中显示密码,除了提醒用户外也不要把密码保存起来。

四.把输入文本传送给应用程序

1.可以发送一个key event来实现

InputConnection ic = getCurrentInputConnection(); long eventTime =SystemClock.uptimeMillis(); ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE)); ic.sendKeyEvent(newKeyEvent(SystemClock.uptimeMillis(), eventTime, KeyEvent.ACTION_UP, keyEventCode, 0,0, 0, 0, KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));

InputMethodService.sendDownUpKeyEvents(keyEventCode);

建议对于一些输入模式使用第一种方法,因为有些按键可能被过滤。

2.通过编辑输入文本,主要使用以下方法。

getTextBeforeCursor() getTextAfterCursor() deleteSurroundingText() commitText()

比如,一个以Fell开头的文本,你想把它替换成Hello!

InputConnection ic = getCurrentInputConnection(); ic.deleteSurroundingText(4, 0);ic.commitText("Hello", 1); ic.commitText("!", 1);

五.联想输入

如果你需要联想输入或者输入过程中动态预测输入的文本,你可以参考如下代码:

InputConnection ic = getCurrentInputConnection(); ic.setComposingText("Composi", 1);... ic.setComposingText("Composin", 1); ... ic.commitText("Composing ", 1);

六.拦截硬件按键消息

尽管输入法窗口没有foucs,但是它最先收到硬件的按键消息,如果需要处理这些硬件按键消息,你只需要重写InputMethodService.onKeyDown()

与InputMethodService.onKeyUp(),如果你不想处理某个按键,记得调用super.onKey* 。

七.其他注意点

1.提供一个用户可以直接从当前输入法进行相关输入法设置的方式。

2.提供一个用户可以切换不同输入法的方式。

3.让输入法界面尽快的弹出,资源或者耗时长的操作可以稍后加载。

4.当输入法窗口被隐藏的时候,大块的内存分配最好尽快释放

5.确保输入法能包含最常用的字符。

转自:http://blog.csdn.net/wangjianli007/article/details/5793464

android 常用输入法,[转载]Android 系统输入法的调用相关推荐

  1. android常用api大全,Android API详解大全.pdf

    Android API详解大全 Android -- TextView 一.TextView的API 1.1 结构 java.lang.Object ↳ android.view.View ↳ and ...

  2. android 常用布局组件,Android六大基本布局

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 一.基本理论 Android六大基本布局分别是: 线性布局LinearLayout. 表格布局TableLayout. ...

  3. android常用窗口动画,android 自定义dialog,窗口动画,

    自定义dialog窗口,根据坐标可随意设置dialog显示位置,实现了窗口弹出动画 Java代码: package com.sunxu.org.IndividualityDialog; import ...

  4. android开发常用技术,[转载]Android开发常用调试技术记录

    ANDROID 调试技术: 1)Ps 指令 ls –l /proc/27/ cat /proc/27/cmdline       #cmdline文件表示了这个进程所在的命令行. cat /proc/ ...

  5. android 常用编译工具,Android 抖音常用反编译工具

    Android 抖音常用反编译工具 常用反编译工具 apktool :反编译apk,重构. dex2jar :反编译apk,解压 classes.dex 文件 JD-GUI :将class文件反编译成 ...

  6. android 常用开发插件,Android Studio 开发利器【常用插件】

    1.ADB Idea ADB操作快捷菜单,快速清除数据,重启应用,卸载应用等 快捷键: Windows: Ctrl+Alt+Shift+A Mac OSX: Ctrl+Shift+A 当然,你可以在K ...

  7. android常用api大全,Android开发个人总结常用的api

    前言 这只是记录下开发过程中常用的api,是经常可能忘了导致去百度的 我还是希望大家最好记在脑子里,需要也提倡查找api,但我感觉只有记住了才能融会贯通,满足需求.每次查出来的,怕不了解,不敢修改等等 ...

  8. Android 常用正则表达式,android编程实战

    | 字符 | 说明 | | - | - | | \ | 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.例如,"n"匹配字符"n"."\n&q ...

  9. android 禁用dlsym_(转载)android下运行时动态链接dlopen()和dlsym()的实现

    出处:http://my.oschina.net/wolfcs/blog/144412#OSC_h2_1 android下运行时动态链接dlopen()和dlsym()的实现 在android中,就如 ...

  10. android常用api大全,Android相关常用API……

    android.provider.MediaStore里包含了相关的Image,Video,Audio信息,可通过managedQuery方法来查询和遍历. Android中的AdapterView使 ...

最新文章

  1. Leangoo用户设置在哪里?
  2. php如何查询数据库表中数据库,PHP+MYSQL如何进行查询数据库
  3. C语言中的选择法排序怎么,请问高手们 C语言中选择法排序和冒泡法排序的思想,两种方法有何不同,搞不懂,请举例详细说明一下.谢谢。...
  4. Hd2087 剪花布条
  5. 代替for循环的常见问题
  6. python动态页面元素爬取_爬取动态网页python+Web kit
  7. mysql中limit后面不能使用运算符
  8. 改善Python程序的91个建议(一)
  9. A Spy in the Metro UVA - 1025
  10. 避免使用GroupByKey
  11. break和continue的方法(break 直接跳出循环)与 (continue本次忽略,但之后的继续)
  12. POJ1088(记忆搜索加dp)
  13. PHP验证时有用的几段代码
  14. (Python+MatLab) 分别实现 PSNR 和 SSIM
  15. webp是什么文件格式?
  16. 硬核:解决github release下载慢的问题(含github下载提速方法)
  17. 案例实战|泰坦尼克号船员获救预测(数据预处理部分)
  18. 【大数据实战】苏宁大数据离线任务开发调度平台实践:设计与开发过程中的要点
  19. 抖音聊天”上线,字节最后的社交梦?
  20. Linux内核中的IPSEC实现(3)

热门文章

  1. sprint冲刺(第二天)
  2. hibernate 基本步骤 一
  3. Javascript中eval函数的用法
  4. mysql同步三张表如何用事务_MySql-第三部分(外键, 多表连接, 事务,视图 )
  5. Spring Cloud Alibaba Sentinel之持久化篇
  6. spring源码:@Configuration源码
  7. lambda表达式学习使用实例
  8. 一个简单的完全信息动态博弈的解答
  9. 同一域内部署多台notes server
  10. poj 2157 Maze(bfs)