android 输入法字典_Android输入法-创建输入法
输入法 (IME) 是一种可让用户输入文本的用户控件。Android 提供了一种可扩展的输入法框架,借助该框架,应用可以为用户提供备选输入法,例如屏幕键盘,甚至是语音输入。安装所需的 IME 后,用户可以从系统设置中选择要使用的 IME,并在整个系统中使用该 IME;一次只能启用一个 IME。
要向 Android 系统添加 IME,您需要创建一个包含扩展
本指南涵盖以下内容:
IME 生命周期
在应用清单中声明 IME 组件
IME API
设计 IME 界面
将文本从 IME 发送到应用
使用 IME 子类型
如果您以前没有处理过 IME,则应先阅读入门文章屏幕输入法。
IME 生命周期
下图显示了 IME 的生命周期:
图 1.IME 的生命周期。
以下各部分介绍了如何实现与遵循此生命周期的 IME 相关联的界面和代码。
在清单中声明 IME 组件
在 Android 系统中,IME 是包含一项特殊 IME 服务的 Android 应用。 应用的清单文件必须声明该服务,请求必需的权限,提供一个与操作 action.view.InputMethod 匹配的 Intent 过滤器,并提供定义 IME 特征的元数据。此外,要提供可让用户修改 IME 行为的设置界面,您可以定义一个可通过系统设置启动的“设置”Activity。
以下代码段声明了一项 IME 服务。它请求了 android.view.InputMethod 匹配的 Intent 过滤器,并定义了 IME 的元数据:
下面的代码段声明了 IME 的设置 Activity。它有一个适用于
您还可以让用户能够直接从 IME 界面访问 IME 设置。
输入法 API
IME 的核心部分是一个服务组件,即一个扩展
以下类也很重要:
定义从用于呈现键盘和响应用户输入事件的
设计输入法界面
IME 有两个主要视觉元素:输入视图和候选视图。您只需要实现与您要设计的输入法相关的元素。
输入视图
输入视图是指用户以点击按键、手写或手势的形式输入文本的界面。当 IME 首次显示时,系统会调用
overridefunonCreateInputView():View{returnlayoutInflater.inflate(R.layout.input,null).apply {if(thisisMyKeyboardView){setOnKeyboardActionListener(this@MyInputMethod)keyboard =latinKeyboard
}}}
在此示例中,MyKeyboardView 是
候选视图
候选视图是指 IME 显示可能的字词更正或字词建议供用户选择的界面。在 IME 生命周期中,系统会在准备好显示候选视图时调用
界面设计注意事项
此部分介绍了一些具体的 IME 界面设计注意事项。
处理多种屏幕尺寸
IME 的界面必须能够针对不同的屏幕尺寸进行缩放,并且还必须处理横向和纵向屏幕方向。在非全屏 IME 模式下,留出足够的空间供应用显示文本字段和任何关联的上下文,以使 IME 占用不超过一半的屏幕空间。在全屏 IME 模式下,不存在此问题。
处理不同的输入类型
通过 Android 文本字段,您可以设置特定的输入类型,例如自由格式的文本、数字、网址、电子邮件地址以及搜索字符串。当实现新的 IME 时,您需要检测每个字段的输入类型,并为其提供相应的界面。不过,您无需设置 IME 来检查用户针对输入类型输入的文本是否有效;这项工作由拥有相应文本字段的应用负责。
例如,以下是随 Android 平台提供的拉丁语 IME 针对文本和电话号码输入提供的界面的屏幕截图:
图 2.拉丁语 IME 输入类型。
当输入字段获得焦点并且您的 IME 启动时,系统会调用
int。要针对文本字段的输入类型对其进行测试,请使用常量
inputType and InputType.TYPE_MASK_CLASS
输入类型位模式可以具有以下值之一:
用于输入数字的文本字段。如前面的屏幕截图所示,拉丁语 IME 显示了适用于此类型的字段的数字键盘。用于输入日期和时间的文本字段。用于输入电话号码的文本字段。用于输入所有受支持字符的文本字段。
在测试这些变体时,请务必使用相应的常量遮盖
注意:在您自己的 IME 中,确保在将文本发送到密码字段时对其进行正确处理。在界面中的输入视图和候选视图中隐藏密码。另请注意,您不应将密码存储到设备上。要了解详情,请参阅安全设计指南。
向应用发送文本
当用户使用您的 IME 输入文本时,您可以通过以下方式向应用发送文本:发送各个按键事件,或在应用的文本字段中修改光标周围的文本。在任何一种情况中,您都要使用
修改光标周围的文本
在文本字段中修改现有文本时,可以使用
例如,以下代码段展示了如何将光标左侧的四个字符替换为文本“Hello!”:
currentInputConnection.also {ic:InputConnection->ic.deleteSurroundingText(4,0)ic.commitText("Hello",1)ic.commitText("!",1)}
在提交之前构成文本
如果您的 IME 执行文本预测或需要多个步骤来撰写某个字形或字词,则您可以在文本字段中显示进度(直到用户提交相应字词),然后将部分文本替换为已完成的文本。在将文本传递至
以下代码段展示了如何在文本字段中显示进度:
currentInputConnection.also {ic:InputConnection->ic.setComposingText("Composi",1)ic.setComposingText("Composin",1)ic.commitText("Composing ",1)}
以下屏幕截图显示了这一过程向用户显示的方式:
图 3.在提交之前构成文本。
拦截硬件按键事件
即使输入法窗口未获得明确的焦点,它也会首先接收硬件按键事件,并且可以选择是使用这些事件,还是将其转发到应用。例如,您可能需要使用方向键在界面中导航,以便在构成文本期间选择候选项。您可能还需要点按返回键,以便关闭来自输入法窗口的任何弹出式窗口。
请务必对您不想自行处理的按键调用 super() 方法。
创建 IME 子类型
借助子类型,IME 可以公开多种受支持的输入法和语言。子类型可以代表以下内容:
语言区域,例如 en_US 或 fr_FR。
输入模式,例如语音输入、键盘输入或手写输入。
特定于 IME 的其他输入样式、形式或属性,例如 10 键键盘布局或 QWERTY 键盘布局。
模式基本上可以是任何文本,例如“keyboard”、“voice”等。子类型还可以公开这些模式的组合。
子类型信息用于通知栏中提供的 IME 切换器对话框以及 IME 设置。通过此信息,框架还可以直接调出 IME 的特定子类型。在构建 IME 时,请使用子类型工具,因为它可以帮助用户识别不同的 IME 语言和模式并在它们之间切换。
您可以使用 元素在输入法的某个 XML 资源文件中定义子类型。以下代码段定义了一个具有两种子类型的 IME:用于美国英语语言区域的键盘子类型,以及用于法国法语语言区域的另一种键盘子类型:
为了确保您的子类型在界面中的标签准确无误,请使用 %s 获取与子类型的语言区域标签相同的子类型标签。以下两个代码段演示了此过程。第一个代码段显示了输入法的 XML 文件的一部分:
第二个代码段是 IME 的 strings.xml 文件的一部分。字符串资源 label_subtype_generic(由输入法界面定义用来设置子类型的标签)定义为:
%s
此设置可使子类型的显示名与语言区域设置一致。 例如,在任何英语语言区域中,显示名都是“English (United States)”。
从通知栏中选择 IME 子类型
Android 系统会管理所有 IME 公开的所有子类型。IME 子类型被视为它们所属 IME 的模式。在通知栏中,用户可以为当前设置的 IME 选择一个可用的子类型,如以下屏幕截图所示:
图 4.从通知栏中选择 IME 子类型。
图 5.在系统设置中设置子类型偏好设置。
从系统设置中选择 IME 子类型
用户可以在“系统设置”区域的“语言和输入法”设置面板中控制子类型的使用方式。
图 6.为 IME 选择语言。
在 IME 子类型之间切换
通过在键盘上提供切换键(例如地球形状的语言图标),您可以让用户在多个 IME 子类型之间轻松切换。这样做可以极大地提高键盘的易用性,并且有助于避免导致用户不满。 要启用此类切换,请执行以下步骤:
在输入法的 XML 资源文件中声明 supportsSwitchingToNextInputMethod = "true"。您的声明应类似于以下代码段:
如果该方法返回 true,则显示一个切换键。
当用户点按该切换键时,调用
注意:在 Android 5.0(API 级别 21)之前的版本中,supportsSwitchingToNextInputMethod 属性。如果用户在没有切换键的情况下切换到某个 IME,可能会卡在该 IME 中,无法轻松从中切换出来。
一般 IME 注意事项
在实现 IME 时,还需要考虑以下事项:
为用户提供一种直接通过 IME 界面设置选项的方式。
由于设备上可能安装了多个 IME,因此为用户提供一种可以直接从输入法界面切换到其他 IME 的方式。
快速调出 IME 界面。根据需要预加载或加载任何大型资源,以便用户可以在点按文本字段后立即看到 IME。缓存用于输入法后续调用的资源和视图。
相反,您应在输入法窗口隐藏之后立即释放较大的内存分配,以便应用可以有足够的内存来运行。考虑在 IME 处于隐藏状态几秒钟后使用延迟消息来释放资源。
确保对于与 IME 相关联的语言或语言区域,用户可以输入尽可能多的字符。请注意,用户可能会在密码或用户名中使用标点符号,因此您的 IME 必须提供多种不同的字符,以允许用户输入密码并访问设备。
android 输入法字典_Android输入法-创建输入法相关推荐
- android 输入法文本选择功能,Android的文本和输入---创建输入法(一)
输入法编辑器(IME)是让用户输入文本的控件.Android提供了一个可扩展的的输入法的框架,它允许应用程序给用户提供另外的输入法,如软键盘或语音输入.这些输入法一旦安装,用户就可以从系统的设置中选择 ...
- Android Studio模拟器如何设置中文输入法
很多Android项目的运行都需要用到中文输入法,在一年前的Android Studio需要导入输入法apk安装,现在新版的Android Studio免去了这个麻烦,下面就教大家如何设置谷歌拼音输入 ...
- Android TV 源码修改默认输入法
前一阵子,应泰国客户需求,需要在Android TV系统定制一个多语言输入法,至少支持中.英.泰三种语言.拿到这个任务,对于至今还是小白的我来说,当然先去google一下有没有大神专门做过符合要求的输 ...
- android源码问题解答之一(输入法)
本文将采取问答形式展开,收集的一些平时修改android平台源码遇到的问题.基于展讯平台,别的平台也基本上类似修改即可. case 1:android:imeOptions有什么作用? 曾经出现一个问 ...
- android 11.0 12.0第三方输入法app设置系统默认输入法
1.概述 在11.0 12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置 输入法的相关功能需求,然后根据输入法包名来设置默认输入法 2.第三方输入法app设置 ...
- Android AlertDialog 对话框开启和关闭输入法问题
Android AlertDialog 对话框开启和关闭输入法问题 AlertDialog 对话框是android jar包自带的对话框,说实话 真的很丑,黑白相间,不是很推荐使用.大多时候 特别是项 ...
- Android EditText设置弹出数字输入法键盘
Android EditText 设置弹出数字输入法键盘 首先设置只能输入数字: <EditText Android:id="@+id/edit_digit_input" a ...
- Android 2.2模拟器调出中文输入法
Android 2.2模拟器调出中文输入法 我目前用的是Android2.2(Google APIs)版本的模拟器,在做一个登录界面时,需要输入中文用户名测试,当时没有调出中文输入法,虽然勾选了&qu ...
- android 12.0 第三方输入法app设置系统默认输入法
1.概述 在12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置输入法的相关功能需求,然后根据输入法包名来设置默认输入法 2.第三方输入法app设置系统默认输入 ...
- android手机软件入门,新手入门Android手机必装软件之输入法篇
上一期,给大家介绍了Android手机必装软件之美化篇(https://soft.shouji.com.cn/news/407.shtml) , 这期给大家推荐Android平台上的最常用的输入法. ...
最新文章
- LeetCode 111. Minimum Depth of Binary Tree--Java, Python解法--二叉树最小高度--迭代,递归
- 发布md 的文章测试
- 贪心算法+回溯算法+动态规划
- 有关Cassandra节点之间的通信:Gossip【译】
- oracle mysql增量迁移_深入浅出XTTS:Oracle数据库迁移升级利器
- CakePHP中文手册【翻译】-基本概念
- python和java的区别-三分钟看懂Python和Java的区别
- 线性表的顺序表示---练习题(算法设计题
- HttpClient下载图片不完整的解决办法
- 【随笔】移动端input type|语义与IOS按键
- Ubuntu系统打不开windows磁盘文件
- 鲸探APP处罚60余位转售数字藏品用户 | 产业区块链发展周报
- 点阵字库(字模)生成器 4.0 TS4
- 桌面虚拟化的技术演变发展史
- RHCSA之Linux系统简介
- 【科技知识】世界量子计算发展史
- stc89c51单片机音乐盒系统设计_基于单片机数字音乐盒的设计与实现(附PCB,电路图,程序)...
- byte为什么是-128-127
- 论文如何快速目录自动生成(wps)
- Lind.DDD.Manager里菜单权限的设计
热门文章
- CorelDRAW VBA - 发布(导出)PDF文档
- 基于复化辛卜生求积公式的变步长求积算法
- c++11 日期和时间工具(std::chrono::duration)(二)
- debian系统简单介绍
- activiti踩坑2-camunda-modeler设计器与activiti7不兼容
- 如果有一天,我老无所依,请把我埋在新闻里!
- SubmitButton
- url“forum.php,如何让discuz论坛首页打开不显示forum.php的方法分享
- BZOJ3202 [Sdoi2013]项链
- 如何清理多余的Windows桌面右键菜单