/**

 * The InputConnection interface is the communication channel from an

 * {@link InputMethod} back to the application that is receiving its

 * input. It is used to perform such things as reading text around the

 * cursor, committing text to the text box, and sending raw key events

 * to the application.

 *InputConnection 是介于输入法和应用程序之间的通信通道。

应用程序接收InputConnection的输入,InputConnection的作用就是循环从Cursor中读取text。往输入框中提交这些text。而且发送关键指令给应用程序。

 * <p>Applications should never directly implement this interface, but

 * instead subclass from {@link BaseInputConnection}. This will ensure

 * that the application does not break when new methods are added to

 * the interface.</p>

 *应用程序不应直接实现此接口,而是实现其子类BaseInputConnection。子类会保证应用程序在执行中不会停止执行。假如InputConnection添加了新的方法。

* <h3>Implementing an IME or an editor</h3>

 * <p>Text input is the result of the synergy of two essential components:

 * an Input Method Engine (IME) and an editor. The IME can be a

 * software keyboard, a handwriting interface, an emoji palette, a

 * speech-to-text engine, and so on. There are typically several IMEs

 * installed on any given Android device. In Android, IMEs extend

 * {@link android.inputmethodservice.InputMethodService}.

 * For more information about how to create an IME, see the

 * <a href="{@docRoot}guide/topics/text/creating-input-method.html">

 * Creating an input method</a> guide.

 *文字输入是由两个要素共同作用的结果。输入法应用程序和控件。

第一个要素:输入法应用程序。输入法程序能够是软键盘、手写板、表情符号,语音输入引擎等等。

android系统默认安装了几款输入法程序在android设备上。在android中,输入法应用程序继承自InputMethodService。

* The editor is the component that receives text and displays it.

 * Typically, this is an {@link android.widget.EditText} instance, but

 * some applications may choose to implement their own editor for

 * various reasons. This is a large and complicated task, and an

 * application that does this needs to make sure the behavior is

 * consistent with standard EditText behavior in Android. An editor

 * needs to interact with the IME, receiving commands through

 * this InputConnection interface, and sending commands through

 * {@link android.view.inputmethod.InputMethodManager}. An editor

 * should start by implementing

 * {@link android.view.View#onCreateInputConnection(EditorInfo)}

 * to return its own input connection.</p>

 *第二个要素:编辑器。

编辑器是用于接收输入法提交的文字并显示的控件。默认这个控件叫做EditText,可是非常多应用程序基于特定需求也会实现他们自己的控件。实现自己定义控件是一个大并且复杂的工作。

同一时候应用程序还要保证他们实现的控件符合android标准EditText行为规范。

控件须要和输入法保持沟通,控件能够通过InputConnection接收输入法提交的文字,通过InputMethodManager发送指令给输入法。

控件通过onCreateINputConnection得到自己的InputConnection对象。

 * <p>If you are implementing your own IME, you will need to call the

 * methods in this interface to interact with the application. Be sure

 * to test your IME with a wide range of applications, including

 * browsers and rich text editors, as some may have peculiarities you

 * need to deal with. Remember your IME may not be the only source of

 * changes on the text, and try to be as conservative as possible in

 * the data you send and as liberal as possible in the data you

 * receive.</p>

 *假如你实现了自己的输入法程序,你须要调用方法和应用程序保持沟通。而且确保你的输入法程序通过了大量应用程序的測试。比如浏览器、往控件中提交大量的数据,由于有些应用程序含有特定的输入规格。你须要处理特定输入规则。

记住,你的输入法程序不是唯一一个改变控件内文字内容的来源,故而对待你提交的text和你接收的数据,尽可能保持慎重。

* <p>If you are implementing your own editor, you will probably need

 * to provide your own subclass of {@link BaseInputConnection} to

 * answer to the commands from IMEs. Please be sure to test your

 * editor with as many IMEs as you can as their behavior can vary a

 * lot. Also be sure to test with various languages, including CJK

 * languages and right-to-left languages like Arabic, as these may

 * have different input requirements. When in doubt about the

 * behavior you should adopt for a particular call, please mimic the

 * default TextView implementation in the latest Android version, and

 * if you decide to drift from it, please consider carefully that

 * inconsistencies in text edition behavior is almost universally felt

 * as a bad thing by users.</p>

 *假如你实现了自己的编辑器,你就须要提供你自己实现的BaseInputConnection子类实例。此实例用于和输入法应用程序保持应答。

确保你的控件通过了大部分输入法的測试,由于他们的行为变化多端。

同一时候确保在多语言下进行測试,包含CJK或者从右到左的语言,比如arabic。

由于这些语言有非常多不同的输入要求。

当你对实现的控件的行为存有疑问时。你能够通话我们。或者模仿近期的android版本号的TextView实现。假如你确定在你的系统中使用它,请考虑清楚控件的文字输入可能让用户体验非常坏。

 * <h3>Cursors, selections and compositions</h3>

 * <p>In Android, the cursor and the selection are one and the same

 * thing. A "cursor" is just the special case of a zero-sized

 * selection. As such, this documentation uses them

 * interchangeably. Any method acting "before the cursor" would act

 * before the start of the selection if there is one, and any method

 * acting "after the cursor" would act after the end of the

 * selection.</p>

 *在android中。光标和所选内容一件事。光标就是一个0内容的所选内容。因而在android中,他们能够互换。

不论什么方法提交在光标前行为就是在提交所选内容之前,同理。在光标之后。就是提交在所选内容之后一样的行为。

* <p>An editor needs to be able to keep track of a currently

 * "composing" region, like the standard edition widgets do. The

 * composition is marked in a specific style: see

 * {@link android.text.Spanned#SPAN_COMPOSING}. IMEs use this to help

 * the user keep track of what part of the text they are currently

 * focusing on, and interact with the editor using

 * {@link InputConnection#setComposingText(CharSequence, int)},

 * {@link InputConnection#setComposingRegion(int, int)} and

 * {@link InputConnection#finishComposingText()}.

 * The composing region and the selection are completely independent

 * of each other, and the IME may use them however they see fit.</p>

 */

编辑器控件须要可以保持写作内容区域的能力,就像标准的编辑小部件一样。

写作区域会被应用特定样式。比如:android.text.Spanned#SPAN_COMPOSING,输入法使用这样来帮助用户保持和当前获取焦点的文字内容追踪的能力,通过setComposingText或者finishComposingText等方法。

输入法InputConnection的更多相关文章

  1. Android源码剖析之Framwork层后记篇(硬件消息传递、apk管理、输入法框架、编译过程)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 既然写到后记篇,就代表本系列到此为止,暂时告一段落:其他一些Manager随后有时间再补,就像源码的 ...

  2. Android InputMethodManager输入法简介

    正文 一.结构 public final class InputMethodManager extends Object Java.lang.Object android.view.inputmeth ...

  3. Android输入法开发

    1. 概念 * IMF: 输入法框架(Input Method Framework) * IM: 输入法(Input Method) * IMS: 输入法服务(Input Method Service ...

  4. Android输入法扩展之外接键盘中文输入

    大家想不想要这样一台Android  Surface平板,看着就过瘾吧. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRsZWFrcw==/font/ ...

  5. Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input)

    一.应用名称 Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input) 二.应用图标 三.应用说明 现在通行的阿拉伯语键盘布局并无规律可循,阿拉伯语使用者需要花费较多时间 ...

  6. Android输入法框架系统(下)

    程序焦点获取事件导致输入法显示 从上面可以知道程序获得焦点时,程序端会先间接的调用IMMS的startInput将焦点View绑定到输入法,然后会调用IMMS的windowGainFocus函数,这个 ...

  7. Android输入法框架系统(上)

    输入法,就是用来输入字符(包括英文,俄文,中文)的工具.输入法你可以看成是一种字符发生器,它将输入数据触摸事件或者按键事件转化为其他更丰富的字符.在PC时代,输入法的原始输入来自实体键盘,鼠标,然后输 ...

  8. Android输入法架构学习总结

    此文为本人学习输入法之后所做的一个总结报告.与大家分享. 安卓输入法框架(Input Method Framework)IMF 一.输入法框架简介 自Android平台1.5版本以后,Google开放 ...

  9. 写一个Android输入法02——候选窗、转换

    上一篇介绍了完成Android输入法的最小化步骤,它只能将按键对应的字符上屏.一般的东亚语言都有一个转换的过程,比如汉语输入拼音,需要由拼音转成汉字再上屏.本文将在前文基础上加入完成转换过程所必需的候 ...

随机推荐

  1. [Apple开发者帐户帮助]八、管理档案(3)创建App Store配置文件

    您可以创建自己的App Store配置文件,以便在将应用程序上载到App Store Connect时使用. 有关完整的App Store工作流程,请转到通过 Xcode帮助中的App Store分发 ...

  2. [Swift通天遁地]九、拔剑吧-(1)实现在程序中跳转到微信、App Store、地图

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  3. canvas 文字转化为粒子

    var canvas = document.createElement('canvas'); var cxt = canvas.getContext('2d'); var W = canvas.wid ...

  4. web安全:防止浏览器记住或自动填写用户名和密码(表单)的终极解决方案

    最近项目上要求做到这一点,在网上搜了一圈,发现都是不完美的,不兼容全部的浏览器,于是只能自己摸索了,最终得出了终极解决方案: 涉及: disabled 或 readonly display:none; ...

  5. JavaScript--如何插入JS

    我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要成对出现,并把JavaScrip ...

  6. [转]linux之初识SELinux

    转自:http://www.linuxidc.com/Linux/2014-07/104447.htm 1.selinux的概述 selinux相信大家一定不会陌生,它的全称是内核级加强型防火墙.在服 ...

  7. Python--10、进程知识补充

    守护进程 基于进程启动的子进程,会和主进程一起结束.主进程结束的依据是程序的代码执行完毕. #创建守护进程p=Process(task) p.daemon = True p.start() 子进程需要 ...

  8. python--9、并发之多进程应用

    multiprocessing模块 想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing.  ...

  9. SQL基本操作——事务

    事务是并发和恢复控制的基本单元. 事务四个属性:原子性.一致性.隔离性.持久性. 原子性:一个事务是一个不可分割的单位,事务中包括的诸多操作要么成功要么都失败. 一致性:事务必须使数据库从一个一致性状 ...

  10. #2028 Lowest Common Multiple Plus

    http://acm.hdu.edu.cn/showproblem.php?pid=2028 应该是比较简单的一道题啊...求输入的数的最小公倍数. 先用百度来的(老师教的已经不知道跑哪去了)辗转相除 ...