Android 1.5新特色之一就是输入法框架(Input
Method Framework,IMF),正是它的出现,才为诞生不带实体键盘的设备提供了可能。IMF设计用来支持不同的IME,包括了soft
keyboard,hand-writing recognizes和hard keyboard translators。这里,我们把焦点锁定在soft
keyboard上。
新特色对普通应用开发者而言,应该确保让应用能够和IMF很好的配合,提供优秀的用户体验。应用要做的最重要事情,就是对每个EditText使用
新的属性android:inputType,这个属性实际代替了很多已经存在的属性,包括android:password,
android:singleLine, android:numeric, android:phoneNumber,android:capitalize, android:autoText, android:editable。如果你两个都声明了,Cupcake设备就会使用新的android:inputType属性,而忽视其他的。
主要的API就是android.view.inputmethod.InputMethodManager,你可以通过Context.getSystemService方法来获取。它允许你和全局输入法状态进行交互,例如显式隐藏或者显示IME的输入法区域。
新特色对于系统开发人员而言,其提供了开发各种各样语言输入法的实现入口,有了它,其他语言输入法才能进驻Android。以下内容即关注如何实现一个输入法。
要创建一个输入法,需要继承android.inputmethodservice.InputMethodService。这个类提供了输入法的
基本实现,包括状态管理、控制输入法可见,还有和当前activity通讯。Android提供了两个输入法和一个示例,这两个输入法分别是PinyinIME和LatinIME输入法,你可以在源码packages/inputmethods下找到,示例即SoftKeyboard,可以在
SDK 1.5下的platforms/android-1.5/samples下找到。这三个输入法提供了目前实现Android平台输入法实现的最佳参考。
输入法的打包方式和其他应用是相同的,在AndroidManifest.xml中,要把输入法声明为service,并附带上合适的intent
filter和相关的meta
data。如下所示:
Java代码:
-
<service android:name=".DemoIme"
-
android:label="@string/ime_name"
-
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>
复制代码
如果输入法允许用户调整设置,那么你还应该提供一个
setting activity。这个时候不要忘记在
input-method的
XML文件中,加入相关的属性,如以下所示(这个文件就是刚才
meta-data中的
@xml/method):
Java代码:
-
<input-method xmlns:android="http://schemas.android.com/apk/res/android"
-
android:settingsActivity="com.demo.SettingsActivity"
-
android:isDefault="@bool/im_is_default" />
复制代码
输入法在UI展现上,有两个主要的可见元素,
input view和
candiate
view。但这不是必需的,可以根据实际需要选择你需要的元素。
Input View,是用户从键盘、手写或者其他方式输入文本的地方。当输入法第一次展现的时
候,
InputMethodService.onCreateInputView()就会被调用。
Candidates
View,是候选词汇集合出现的地方。其可有可无,可以在调用
InputMethodService.onCreateCandidatesView时返
回null,–这是它的默认行为。
应用的文本区可以有不同的输入类型,包括文本、数值、URL、邮箱地址和搜索,因此在你实现新的输入法时,需要当心不同的输入类型。输入法并不会自 动切换不同的输入类型,所以你要在IME中支持所有的类型。不过可以轻松一点的是, IME并不负责输入内容的校验,—因为这是应用的职责。
InputMethodService.onStartInputView()被调用时,会传入一个
EditorInfo对象,这个对象包含了关于
输入类型和
text field的其他属性的细节。
EditorInfo.inputType和
EditorInfo.TYPE_CLASS_MASK可以是很多值,包括
TYPE_CLASS_NUMBER,TYPE_CLASS_DATETIME,TYPE_CLASS_PHONE,TYPE_CLASS_TEXT。可以通过
android.text.InputType了解更多信息。
要把文本发送给应用有两种方式,你可以发送单一的按键事件,也可以在应用的文本框内编辑光标附近的文本。发送按键事件,可以简单构造
KeyEvent对象,并且调用
InputConnection.sendKeyEvent(),或者更加方便一点,使用
InputMethodService.sendDownUpKeyEvents(keyEventCode)。在编辑文本框
时,
android.view.inputmethod.InputConnection有一些很有用的方法,例如
getTextBeforeCursor()等等。
分享到:
相关推荐
Android之输入法开发简单说明.pdf
安卓输入法源码,可编译通过。源码参考,欢迎下载
android7.1.2内置搜狐输入法,包括SogouInput.apk和Android.mk 将压缩包解压,并将其中的apk解压,然后上传到android_source/packages/apps/
Android平台输入法开发解析[参考].pdf
前一段时间需要开发一个Android上的输入法,收集了一些源码,仅供参考
Android平台输入法开发解析 解析android inputmethod
开发语言:java 开发环境:android studio ...C++代码,cmake编译通过,整个工程可以编译成一个输入法apk,安装后需要在设置里添加此输入法,再选择使用即可。 适合人群:C++/JAVA开发者,对有输入法定制需求的人群
android开发中,输入法的源码。里面涉及了很多android基础知识,和一些高深的
一款功能强大的输入法,集合 “广东话、拼音、仓颉、速成”四种常用中文输入法,以及英文、数字及符号键盘,一按独立切换键即可变更。同一键盘可作中英文输入,无需切换... Android 输入法框架开发,代码力求小巧可读。
本文主要从android输入法的实现原理上分析IMF框架,介绍了如何在android系统下开发自己的输入法。
1.调用显示系统默认的输入法 方法一、 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(m_receiverView(接受软键盘输入的视图(View)),...
Android 输入法手势程序源码,android源码
安卓平台输入法开发解析,介绍安卓输入法开发框架和基本流程。
android简易智能手表输入法(适合圆形手表)-WatchInputMethod
安卓Android源码——类似搜狗输入法源码.zip
"建了一个手势文件!然后将手势保存到文件中."); et.setText(""); gestureToImage(gesture); } else { tv.setText("保存手势失败!"); } } else {//当存在此文件的时候我们需要先...
Android 应用项目开发源码 参考和学习使用
基于Android平台的手写输入法框架的研究.pdf
该软件适用于安卓2.1以上的安卓系统,注:手机