一.
1.创建一个新的输入法需要继承android.inputmethodservice.InputMethodService,这个类提供了一个输入法
的基本实现,例子可以参考sdk中的SoftKeyboard的代码。
2.输入法跟其他application或service一样会被打包成一个apk,在 AndroidManifest.xml,把它声明成一个
service.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fastinput">
<application android:label="@string/app_label">
<!-- Declares the input method service -->
<service android:name="FastInputIME"
android:label="@string/fast_input_label"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
<meta-data android:name="android.view.im" android:resource="@xml/method" />
</service>
<!-- Optional activities. A good idea to have some user settings. -->
<activity android:name="FastInputIMESettings" android:label="@string/fast_input_settings">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
</application>
</manifest>
|
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来实现
1
2
3
4
5
6
7
8
|
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(new KeyEvent(SystemClock.uptimeMillis(), eventTime,
KeyEvent.ACTION_UP, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
|
或者
1
|
InputMethodService.sendDownUpKeyEvents(keyEventCode);
|
建议对于一些输入模式使用第一种方法,因为有些按键可能被过滤。
2.通过编辑输入文本,主要使用以下方法。
1
2
3
4
|
getTextBeforeCursor()
getTextAfterCursor()
deleteSurroundingText()
commitText()
|
比如,一个以Fell开头的文本,你想把它替换成Hello!
1
2
3
4
|
InputConnection ic = getCurrentInputConnection();
ic.deleteSurroundingText(4, 0);
ic.commitText("Hello", 1);
ic.commitText("!", 1);
|
五.联想输入
如果你需要联想输入或者输入过程中动态预测输入的文本,你可以参考如下代码:
1
2
3
4
5
6
|
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.确保输入法能包含最常用的字符。
八.例子:
可以参考LatinIME的例子:
http://android.git.kernel.org/?p=platform/packages/inputmethods/LatinIME.git;a=tree
或者1.5 SDK也提供了一个SoftKeyboard的例子。
原文链接:http://blogold.chinaunix.net/u3/90973/showart_2146695.html
分享到:
相关推荐
一款功能强大的输入法,集合 “广东话、拼音、仓颉、速成”四种常用中文输入法,以及英文、数字及符号键盘,一按独立切换键即可变更。同一键盘可作中英文输入,无需切换,支持联想字功能,融合英汉字典。 繁体中文...
Android Studio模拟器 AVD intelx86 中文莱姆输入法.apk 安装包 x86模拟器中文输入法,x86模拟器中文输入法x86模拟器中文输入法x86模拟器中文输入法
android开发中,输入法的源码。里面涉及了很多android基础知识,和一些高深的
android 手机 中文输入法 apk
开发语言:java 开发环境:android studio ...C++代码,cmake编译通过,整个工程可以编译成一个输入法apk,安装后需要在设置里添加此输入法,再选择使用即可。 适合人群:C++/JAVA开发者,对有输入法定制需求的人群
安卓(Android)系统本身的确没有原生的日文输入法,但是谷歌公司在安卓SDK中包含了日本omronsoft软件公司的开源输入法OpenWnn。OpenWnn是omronsoft公司的手机输入法iWnn IME的精简开源版本。OpenWnn在官方各个版本...
android输入法android输入法android输入法android输入法
输入法的操作:点击非文本框的区域,输入法则隐藏。
Android 类似搜狗输入法android源码.zip
android输入法 emoji 输入法 键盘 软键盘
android7.1.2内置讯飞输入法发,包括FlyIMEjackw.apk和Android.mk 将压缩解压,并将其中的apk解压,然后上传到android_source/packages/apps/
在高通平台8909上实现的修改默认google拼音输入法,及将apk预置到系统中
讲解在Android 平台实现中文输入的要点
本文主要从android输入法的实现原理上分析IMF框架,介绍了如何在android系统下开发自己的输入法。
前一段时间需要开发一个Android上的输入法,收集了一些源码,仅供参考
Android自定义输入法软键盘,博客地址: https://blog.csdn.net/DeMonliuhui/article/details/84589936
很多的移动应用中经常需要限定用户输入特定的字符,比如吱妇保,微信钱包等...最近我在项目中遇到的一个车牌输入法的问题,需要限定用户第一个字符只能是34个省份汉字简称,第二位为大写字母,余下5位为数字+字母大写的形势
android 点击空白区域,隐藏键盘
android7.1.2内置搜狐输入法,包括SogouInput.apk和Android.mk 将压缩包解压,并将其中的apk解压,然后上传到android_source/packages/apps/