当前位置:首页 >> 信息与通信 >>

Android InputMethod


Android 自帶的輸入法有三種,分別為 Android Keyboard、谷歌拼音输入法、 Japanese IME。它们实际上就是 app,输入法应用程序。 源码在: /home/$USER/administrator/source_code/qct/DataDisk/U7699EP-wharton/Linux/pac kages/inputmethods 里面,对应为 LatinIME、PinyinIME、OpenWnn。 Android 的输入法框架比较复杂。从进程的角度来讲,相关功能主要分布在下面 三个位置:

客户端应用是一个包含有图形界面的应用,如地址本。图形界面上包含有能够接 收输入的编辑框,如 TextView。 输入法模块提供软键盘,将用户在软键盘上的按键输入根据某种算法(如 Zi, T9, 国笔等)转换成单词,然后传递给客户端应用。 平台部分实现一些管理功能,负责装载某个输入法模块,启动,终止该模块等。 创建一个输入法,必须继承 android.inputmethodservice.InputMethodService, 它作为一个服务,监听所有 EditText 的事件。下面是实现一个基本的输入法程 序的步骤。 1. 建立一个继承自 android.inputmethodservice.InputMethodService 的类,称 为输入法的服务类。 2. 在 AndroidManifest.xml 文件中配置这个服务类。 3. 编写一个用于显示软键盘的布局文件。 4. 覆盖 InputMethodService 类的 onCreateInputView 方法。 5. onCreateInputView 方法需要返回与第 3 步建立的布局文件对应的 View 对 象。在返回之前,一般需要设置相应控件的事件,如软键盘按钮单击事件。 6. 在输入法服务类或其他类中编写响应软键盘中按键事件的代码,如按钮单击 事件、物理键盘事件等。

在用户触发输入法显示的时候(点击输入框),InputMethodService 启动,然 后调用 onCreate() 函数,该函数在输入法第一次启动的时候调用,适合用来做 一些初始化的设置,切忌不要在代码中直接调用该函数;然后调用 onCreateInputView() 函数,在该函数中创建 KeyboardView 并返回;然后调用 onCreateCandidatesView()函数,在该函数中创建候选区实现并返回;然后调用 onStartInputView(EditorInfo attribute, boolean restarting)函数来开始输入内容, 输入结束后调用 onFinishInput()函数来结束当前的输入, 如果移动到下一个输入 框则重复调用 onStartInputView 和 onFinishInput 函数;在输入法关闭的时候调 用 onDestroy() 函数。 以下是 LatinIME 输入法分析: 输入法的设置在 res/xml/method.xml 的<input-method>标签中,主要设置两个 属性: android:settingsActivity,输入法的设置程序入口。 android:isDefault,这个输入法是不是系统的默认输入法。 LatinIME.java 中 LatinIME 继承 InputMethodService;生命周期中方法均在此 文件中实现。 最基本的字母布局由 res/xml/下面的 kbd_qwerty.xml,kbd_qwerty_black.xml 定 义,其它的还有符号布局,数字布局等也都在这个文件夹下面。当用户进行操作 时,程序就会在这些布局之间来回切换。 Row 元素说明这是一行按键的定义,Key 元素说明这是一个按键的定义。Key 元 素通过一些属性来定义每个按键,绘制 Key 的时候,主要绘制两个东西,label 和 icon。 对于 a,b,c,1,2,&等这样可以用字符来表示的键, 就绘制它的 label 属性。 对于 Shift,Alt 等这样无法用字符表示的键,就绘制它的 icon 属性。 下面是一些常用的属性介绍: Codes:代表按键对应的输出值,可以为 unicode 值或则逗号(,)分割的多个值, 也可以为一个字符串。在字符串中通过“\\”来转义特殊字符,例如 '\\n' 或则 '\\uxxxx' 。Codes 通常用来定义该键的键码,例如数字按键 1 对应的为 49;如果 提供的是逗号分割的多个值则和普通手机输入键盘一样在多个值之间切换。 keyLabel:代表按键显示的文本内容。 keyIcon:代表按键显示的图标内容,如果指定了该值则在显示的时候显示为图 片不显示文本。 keyWidth:代表按键的宽度,可以为精确值或则相对值,对于精确值支持多种单 位,例如:像素,英寸 等;相对值为相对于基础取值的百分比,为以% 或则%p 结尾,其中%p 表示相对于父容器。

keyHeight:代表按键的高度,取值同上。 horizontalGap:代表按键前的间隙(水平方向) ,取值同上。 isSticky:指定按键是否为 sticky 的。例如 Shift 大小写切换按键,具有两种状态, 按下状态和正常状态,取值为 true 或则 false。 isModifier:指定按键是否为功能键( modifier key ) ,例如 Alt 或则 Shift 。取 值为 true 或则 false。 keyOutputText:指定按键输出的文本内容,取值为字符串。 isRepeatable:指定按键是否是可重复的,如果长按该键可以触发重复按键事件 则为 true,否则为 false。 keyEdgeFlags:指定按键的对齐指令,取值为 left 或则 right。


相关文章:
Android学习之TextView属性总结
例如: com.google.android.inputmethod.pinyin,但是这里报错找不到。 IT 在线教育平台———麦子学院:http://www.maiziedu.com android:inputType:设置文本的类型...
ANDROID:控件属性(很全)
android:imeActionLabel 设置 IME 动作标签。 android:includeFontPadding 设置文本是否包含顶部和底部额外空白,默认 为 true。 android:inputMethod 为文本指定输入法,...
Android中常见控件的介绍和使用--陈位斌
android:includeFontPad ding android:inputMethod android:inputType android:linksClickable android:marqueeRepeatL imit 设置文本是否包含顶部和底部额外空白,默认为 ...
Android之EditText属性和方法说明
例如: com.google.android.inputmethod.pinyin,但是这里报错找不到。 android:inputType 设置文本的类型,用于帮助输入法显示合适的键盘类型。在 EditView 中再 详细...
安卓各控件属性及常用快捷键
android:inputMethod 为文本指定输入法,需要完全限定名 ( 完整的包名 ) 。例如: com.google.android.inputmethod.pinyin,但是这里报错找不到。 android:inputType ...
android属性列表
android:imeActionLabel 设置 IME 动作标签。 android:includeFontPadding 设置文本是否包含顶部和底部额外空白,默认为 true。 android:inputMethod 为文本指定输入法,需要...
Android控件常见的属性
android:imeActionLabel 设置 IME 动作标签。 android:includeFontPadding 设置文本是否包含顶部和底部额外空白,默认为 true。 android:inputMethod 为文本指定输入法, ...
Android 控件xml属性详解
android:imeActionLabel android:includeFontPad ding android:inputMethod 为文本指定输入法,需要完全限定 名(完整的包名) 设置文本的类型,用于帮助输入法 显示合适的...
Android AndroidManifest 清单文件以及权限详解_图文
只有系统才能使用 android.permission.BIND_INPUT_METHOD ,请求 InputMethodService 服务,只有系统才能使用 android.permission.BIND_REMOTEVIEWS,必须通过 android....
android_text属性
android:includeFontPadding 设置文本是否包含顶部和底部额外空白,默认为 true。 android:inputMethod 为文本指定输入法,需要完全限定名(完整的包名)。例如: com.google...
更多相关标签: