/**

 * 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. windows下 redis/tomcat 服务自启动

    //设置redis服务自启动 //根据个人配置执行语句.   redis-server --service-install redis.windows.conf --loglevel verbose ...

  2. 用Python一键搭建Http服务器的方法

    用Python一键搭建Http服务器的方法 Python3请看 python -m http.server 8000 & Python2请看 python -m SimpleHTTPServe ...

  3. Ambari?自动部署Hadoop集群

    自动部署?Ambari Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目.就 Ambari 的作用来说,就是创建 ...

  4. Java系列学习(十二)-开始Eclipse

    1.用Eclipse来写一个HelloWorld (1)选择工作空间 工作空间其实就是我们写的源代码所在的目录 (2)创建一个Java项目 [File-New-Java Project] (3)创建包 ...

  5. CSS——宠物demo

    注意:ul中自带padding值,需要清除. <!DOCTYPE html> <html lang="en"> <head> <meta ...

  6. [Windows Server 2012] 手工破解MySQL密码

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:破解MySQL ...

  7. js取自定义data属性

    //20170329 原本以为只能attr或者prop来获取属性,但是今天看别人的代码他自定义了一个属性,却取不到他的属性值,我自己在本地又可以取到,难道是phtml的原因,于是我到网上查找,发现了一 ...

  8. javascript中 (function(){})();如何理解?

    javascript中 (function(){})();如何理解? javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环 ...

  9. Burnside引理和polay计数 poj2409 Let it Bead

    题目描述 "Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. As you ...

  10. 18清明校内测试T3

    扫雷(mine) Time Limit:1000ms   Memory Limit:128MB 题目描述 rsy最近沉迷于一款叫扫雷的游戏. 这个游戏是这样的.一开始网格上有n*m个位置,其中有一些位 ...