首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

真·富文本编辑器的演进之路-Span的整体性控制

控制选中 在讲解如何在普通文本中对Span做整体性控制前,我们先来考虑下选择的问题——如何让「整体性Span」的内部无法被选中。 首先,我们要知道,Edittext的光标也是一种Span。...也就是说,我们可以通过监听光标的移动事件,通过Selection实现当光标移动到Span内部时,让它重新移动到Span最近的边缘位置,从而让Span内部永远无法插入光标,这就是我们的主要思路。...那么问题来了,我要怎么监听Edittext的光标呢?...其实,Android的Span不仅功能非常强大,而且也提供了非常完善的管理API,在TextView和Edittext中,我们要监听Text的变化过程,可以使用TextWatcher,它可以在文本发生改变时进行回调...,就将Selection光标移动到最近的Span标记处。

2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android软键盘输入处理技巧

    因此,了解如何监听软键盘输入是非常重要的。 如何监听软键盘输入 在Android中,我们可以使用EditText的TextWatcher接口来监听软键盘输入。...) { // 在文本改变后执行的操作 } }); 通过TextWatcher接口,我们能显示层进行输入监听,但如果我们需要在软键盘操作的过程中就监听用户的输入行为,又该如何实现呢...它允许您: 监听用户的输入操作,如按键、删除等。 拦截并自定义文本输入。 实现撤销、重做和自动修复等功能。 与 EditText 控件进行通信,以控制光标位置、文本选择和其他编辑操作。...finishComposingText():在用户完成文本输入后被调用,可以在此方法中处理输入完成后的操作。 通过实现这些方法,你可以监听用户的输入事件,并在相应的时机执行相应的操作。...现在,软键盘输入将通过 MyInputConnection 进行监听和记录。 总结 通过使用TextWatcher接口,我们可以轻松地监听软键盘输入,并在用户输入文本时执行相应的操作。

    48210

    Vim命令使用说明

    基本移动 h或退格: 左移一个字符; l或空格: 右移一个字符; j: 下移一行; k: 上移一行; gj: 移动到一段内的下一行; gk: 移动到一段内的上一行; +或Enter: 把光标移至下一行第一个非空白字符...w: 前移一个单词,光标停在下一个单词开头; W: 移动下一个单词开头,但忽略一些标点; e: 前移一个单词,光标停在下一个单词末尾; E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点; b:...fc: 把光标移到同一行的下一个c字符处 Fc: 把光标移到同一行的上一个c字符处 tc: 把光标移到同一行的下一个c字符前 Tc: 把光标移到同一行的上一个c字符后 ;: 配合f & t使用,重复一次...ctrl+e: 向下滚动一行。 ctrl+y: 向上滚动一行。 n%: 到文件n%的位置。 zz: 将当前行移动到屏幕中央。 zt: 将当前行移动到屏幕顶端。...zb: 将当前行移动到屏幕底端 标记 使用标记可以快速移动。到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 后退 和 前进 。

    2.6K11

    VIM 常用快捷键

    而且写文件、查找翻页什么的 比我用鼠标快多了,那熟练的快捷键看的我一愣一愣的 ---- 光标移动: h或退格: 左移一个字符; l或空格: 右移一个字符; j: 下移一行; k: 上移一行; gj: 移动到一段内的下一行...; gk: 移动到一段内的上一行; +或Enter: 把光标移至下一行第一个非空白字符。...w: 前移一个单词,光标停在下一个单词开头; W: 移动下一个单词开头,但忽略一些标点; e: 前移一个单词,光标停在下一个单词末尾; E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点; b:...ctrl+e: 向下滚动一行。 ctrl+y: 向上滚动一行。 n%: 到文件n%的位置。 zz: 将当前行移动到屏幕中央。 zt: 将当前行移动到屏幕顶端。 zb: 将当前行移动到屏幕底端。...查找和替换 /something: 在后面的文本中查找something。 ?something: 在前面的文本中查找something。 n: 向后查找下一个。 N: 向前查找下一个。

    27.3K23

    Vim编辑器常用快捷键

    前言 Vim编辑器是Vi编辑器的升级版,Vi支持的所有语法都可在Vim中使用 基本使用 I:编辑模式,通过方向键控制光标移动 ECS:直接按ESC,退出编辑模式进入normal模式 :e:重新加载当前文档...:重新加载当前文档,并丢弃已做的改动 :w:保存修改。 :wq:保存退出,即使文件没有被修改也强制写入,并更新文件的修改时间 ZZ:保存退出。...h或者退格: 左移一个字符;l或者空格: 右移一个字符;j: 下移一行;k: 上移一行;gj: 移动到一段内的下一行;gk: 移动到一段内的上一行;+或者Enter: 把光标移至下一行第一个非空白字符。...w: 前移一个单词,光标停在下一个单词开头;W: 移动下一个单词开头,但忽略一些标点;e: 前移一个单词,光标停在下一个单词末尾;E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;b: 后移一个单词...^: 移动到本行第一个非空白字符。: 移动到行尾。g: 移动光标所在屏幕行行尾。n|: 移到递n列上。nG: 到文件第n行。H: 移到屏幕最顶端一行。M: 移到屏幕中间一行。

    3.4K20

    你从未见过的EditText属性详解

    那么学习了这篇文章之后,开始尽情发挥你们的想象力开始搞事情吧~ 这一篇我们讲解 EditText的使用, EditText是一个输入框,在Android开发中是常用的控件。...--提示的颜色--> 2.获得焦点后全选组件内所有文本内容 android:selectAllOnFocus="true" 3.限制 EditText输入类型 EditText...--时间--> 5.设置最小行,最多行,单行 android:minLines="3" 行的行数--> android:maxLines="10" 将居中显示--> 代码实例讲解 通过上面了解 EditText输入框的常用属性之后,结合上几讲 TextView、Button我们通过代码示例来讲解实现一个简单的登录页面效果...,需要实现 TextWatcher接口 private class TextChangedTextWatcher implements TextWatcher { private EditText

    3.3K10

    快速学习-Linux(VIM编辑器)

    文件的路径 作用:打开指定的文件,并且将光标移动到指定行 #vim +/关键词 文件的路径 作用:打开指定的文件,并且高亮显示关键词(搜索) 重点:先复制出一个/etc/passwd文件,复制当前桌面下...2.1、命令模式 注意:该模式是打开文件的第一个看到的模式(打开文件即可进入) 2.1.1、光标移动 ①光标移动到行首 按键:shift + 6 或 ^(T字母上面的6,不要按小键盘的6) ②光标移动到行尾...复制操作 ① 复制光标所在行 按键:yy 粘贴:在想要粘贴的地方按下p键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用P键 ② 以光标所在行为准(包含当前行),向下复制指定的行数...按键:数字yy 2.1.3、剪切/删除 ① 剪切/删除光标所在行 按键:dd (删除之后下一行上移) 注意:dd严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果。...② 剪切/删除光标所在行为准(包含当前行),向下删除/剪切指定的行 按键:数字dd (删除之后下一行上移) ③ 剪切/删除光标所在的当前行(光标所在位置)之后的内容,但是删除之后下一行不上移 按键:

    2.7K10

    让你的EditText删除表情比微信更高效--记一次android性能分析优化实战

    前言 自己在做SpEditTool:一个支持表情,@mention,#话题#等功能的EditText控件,这个项目的时候出现了一个很奇怪的问题 EditText输入表情过多的时候,从中间开始删除表情,会出现非常卡的情况...() 删除表情后再将SpannableStringBuilder设置给EditText 最后设置光标位置 完成这一系列操作之后demo一跑,删除果然变流畅了,当时心里那个高兴啊,竟然做个功能可以比微信实现的还好那么一点...,搜狗输入法也会出现,估计是百度输入法在出现这样的情况时就把删除按钮的触摸事件给中断了 出现上面log的原因是因为InputConnection在setText()时需要被重新创建,而第二次删除时InputConnection...Emoji出现在TextView中逃不出也用的是ImageSpan,想看看谷歌会不会也有从中间开始删除表情卡顿的feature,就去找了下这个库的demo,一跑发现demo中不管从末尾还是从中间删都不会卡...对象 将Class对象作为新的SpannableStringBuilder的构造参数传入 final class ImageEditableFactory extends Factory { private

    1.4K30

    IdeaVim 基本操作

    基本移动 以下移动都是在normal模式下 快捷键 含义 h或退格 左移一个字符 l或空格 右移一个字符 j 下移一行 k 上移一行 +或Enter 把光标移至下一行第一个非空白字符 – 把光标移至上一行第一个非空白字符...w 前移一个单词,光标停在下一个单词开头 e 前移一个单词,光标停在下一个单词末尾 b 后移一个单词,光标停在上一个单词开头 ge 后移一个单词,光标停在上一个单词末尾 { 前移1段 } 后移1段...ctrl+b 上翻一屏 ctrl+d 下翻半屏 ctrl+u 上翻半屏 ctrl+e 向下滚动一行 ctrl+y 向上滚动一行 n% 到文件n%的位置 zz 将当前行移动到屏幕中央 zt 将当前行移动到屏幕顶端...zb 将当前行移动到屏幕底端 文本的插入 基本插入 快捷键 含义 i 在光标前插入 a 在光标后插入 I 在当前行第一个非空字符前插入 A 在当前行最后插入 gI 在当前行第一列插入 o 在下面新建一行插入...something 在前面的文本中查找something /pattern/+number 将光标停在包含pattern的行后面第number行上 /pattern/-number 将光标停在包含pattern

    2.2K30

    【总结】vim命令使用总结,该来的还是躲不掉啊晕

    命令大全,最详细(建议收藏) 光标的移动 h - 左移光标 j - 下移光标 k - 上移光标 l - 右移光标 gj - 下移光标(折行文本) gk - 上移光标(折行文本) H - 移动到当前页面顶部...Esc - 退出插入模式 编辑文本 r - 替换当前字符 R - 在 ESC 按下之前,替换多个字符 J - 将下一行合并到当前行, 并在两部分文本之间插入一个空格 gJ - 将下一行合并到当前行,...两部分文本之间不含空格 gwip - 重新调整段落 g~ - 大小写转换操作修饰符 gu - 小写操作修饰符 gU - 大写操作修饰符 cc - 将光标所在的行删除, 然后进入插入模式 c$ or C...从光标位置到行末 p - 在光标后粘贴 P - 在光标前粘贴 gp - 在光标后粘贴并把光标定位于粘贴的文本之后 gP - 在光标前粘贴并把光标定位于粘贴的文本之后 dd - 剪切当前行 2dd - 剪切...]c - 光标移至下一处差异 [c - 光标移至上一处差异 do or :diffg[et] - 将另一缓冲区中的差异合并至当前缓冲区 dp or :diffpu[t] - 将当前缓冲区中的差异推送至另一缓冲区

    55721

    Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    也就是说,我们可以不使用EditText自身的API却能够管理它的光标活动和选中状态(请注意这几句话,他是“优雅实现”的基石)。 Selection管理光标活动。那么,SpanWatcher又是什么?...也就是说,我们可以通过SpanWatcher侦听光标活动,通过Selection实现当光标移动到Span内部时,让它重新移动到Span最近的边缘位置,Span内部永远无法插入光标。...因此,SelectionSpanWatcher没有被赋值给EditText的文本。 既然NoCopySpan不被复制,那我们等SpannableStringBuilder构造好后重新设置便好了。...Editable.Factory的注释让我看到了希望。他可以被重写,并被重新注入EditText。...运行效果: 5、微信的做法 微信的处理方式要简单一些,他们不禁止在Span覆盖的文本中插入光标,而是当Span覆盖的文本改变后清除Span以及数据。

    2.3K30

    不会vim?看这篇就够了!

    因此只要学会使用vi编辑器后,无论在什么版本的Linux系统下,我们都能在所有的文件中“横着走” vim介绍: vi和vim都是Linux中的编辑器,不同的是,vim更适用于coding,功能相较vi更加强大...- 三、打开文件 Vim的打开文件的方式: (1)#vim 文件路径 作用:打开指定的文件 (2)#vim +数字 文件的路径 作用:打开指定的文件,并且将光标移动到指定行 (3)#...按键:shift + 6 即输入 ‘^’ ②光标移动到行尾 按键:shift + 4 即输入 ‘$’ ③光标移动到首行 按键:gg ④光标移动到末行 按键:G ⑤快速移动到指定的行 按键:数字G...④粘贴: 按键:p 3、剪切/删除 ①剪切/删除光标所在行 按键:dd (删除之后下一行上移) 注意:如果剪切了不粘贴就是删除的效果。...②剪切/删除光标所在行为准(包含当前行),向下删除/剪切指定的行 按键:数字dd (删除之后下一行上移) ③剪切/删除光标所在的当前行光标之后的内容,但是删除之后下一行不上移 按键:D (删除之后当前行会变成空白行

    3.4K00

    Linux命令之vim三种模式

    ,并且将光标移动到指定行 vim +/关键词 文件的路径 作用:打开指定的文件,并且高亮显示关键词 vim 文件路径1 文件路径2 文件路径3 作用:同时打开多个文件 三、命令模式 注意:该模式是打开文件的第一个看到的模式...(打开文件即可进入) 1、光标移动 ①光标移动到行首 按键:shift + 6 或 ^(T字母上面的6,不要按小键盘的6) ②光标移动到行尾 按键:shift + 4 或 $(R字母的左上角的4,不是小键盘的...或V(可视行)或v(可视),然后按下↑↓← →方向键来选中需要复制的区块,按下y键进行复制,最后按下p键粘贴 3、剪切/删除 ①剪切/删除光标所在行 按键:dd (删除之后下一行上移) 注意:dd严格意义上说是剪切命令...②剪切/删除光标所在行为准(包含当前行),向下删除/剪切指定的行 按键:数字dd (删除之后下一行上移) ③剪切/删除光标所在的当前行之后的内容,但是删除之后下一行不上移 按键:D (删除之后当前行会变成空白行...) 恢复:ctrl + r 恢复(取消)之前的撤销操作 5、扩展1:光标的快速移动 ①快速将光标移动到指定的行 按键:数字G ②以当前光标为准向上/向下移动n行 按键:数字↑,数字↓ ③以当前光标为准向左

    3.6K20

    EditText 集锦 - 开发中常用的用法及遇到的各种坑

    中使用,而后面使用就会报红线… android:textColorHighlight //设置被选中字体的颜色.默认为 Theme 主题中的 “colorAccent”的颜色. textCursorDrawable...//设置被光标的颜色.默认为 Theme 主题中的 “colorAccent”的颜色. android:textScaleX //设置文本的水平缩放系数. android:typeface //设置hint...@null"设置背景为透明.当我们设置背景后,EditText的那条线就会消失. android:textAppearance //设置文本的颜色,字体,大小和样式. android:digits //...,设置两行就显示两行,即使第二行没有数据. android:lineSpacingExtra //设置行间距. android:lineSpacingMultiplier //设置行间距的倍数...., 0); } 取消 EditText 默认获取焦点的行为 在EditText的父级控件中找一个,添加这两个属性: android:focusable="true" android:focusableInTouchMode

    2.3K20

    RxBinding详解: 规范而强大的安卓UI响应式编程

    一段时间后,你的fragment或者activity中由于各种匿名类而显得十分混乱。这时,如果你想再为该类中控件/视图添加由其它视图触发的响应事件,那将变得非常复杂。...在传统Android中,我们必须实现整个TextWatcher才行,这会多出许多行没必要的代码,因为你还得实现beforeTextChanged方法与 afterTextChanged方法。...使用RxBinding,我可以细微控制只实现我需要的功能而无需实现整个接口。 必须注意到前面的例子中使用RxBinding只是简单实现了TextWatcher的onTextChanged方法。...让我们来看一下这个例子: 假设你想察看一个EditText输入文字时文本的变化(查看指定类型的数据)。...subscription 将String类型的值显示在nameLabel上。

    2.9K40

    Linux学习笔记之vim操作指令大全

    h或退格: 左移一个字符; l或空格: 右移一个字符; j: 下移一行; k: 上移一行; gj: 移动到一段内的下一行; gk: 移动到一段内的上一行; +或Enter: 把光标移至下一行第一个非空白字符...w: 前移一个单词,光标停在下一个单词开头; W: 移动下一个单词开头,但忽略一些标点; e: 前移一个单词,光标停在下一个单词末尾; E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点; b:...fc: 把光标移到同一行的下一个c字符处 Fc: 把光标移到同一行的上一个c字符处 tc: 把光标移到同一行的下一个c字符前 Tc: 把光标移到同一行的上一个c字符后 ;: 配合f & t使用,重复一次...ctrl+e: 向下滚动一行。 ctrl+y: 向上滚动一行。 n%: 到文件n%的位置。 zz: 将当前行移动到屏幕中央。 zt: 将当前行移动到屏幕顶端。 zb: 将当前行移动到屏幕底端。...m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。 `{a-z}: 移动到标记位置。 ‘{a-z}: 移动到标记行的行首。

    2.8K21

    Linux-vim

    2. vim常用命令 2.1 一般模式中的命令 2.1.1 光标移动 命令 说明 h,← 光标左移一个字符 j,↓ 光标下移一个字符 k,↑ 光标上移一个字符 l,→ 光标右移一个字符 n[h,j,k,...M 光标移动到屏幕中央一行的第一个字符 L 光标移动到屏幕最后一行的第一个字符 G 光标移动到文件最后一行 nG n为数字,光标移动到文件第n行 gg 光标移动到文件第一行,相当于1G n行 ynG n为数字,复制光标所在行到第n行 yG 复制光标所在行到最后一行 y0 复制光标所在字符到该行行首 y$ 复制光标所在行到该行行尾 p 将复制的数据粘贴在光标下一行 P 将复制的数据粘贴在光标上一行...J 将光标所在行与下一行的数据合并成一行 C,c$ 删除当前行光标后面的字符,并进入编辑状态 c0,c^ 删除当前行光标前面的字符,并进入编辑状态 cc,S 删除当前行,并进入编辑状态 cw 删除光标到该单词结束位置...mode)a:从光标所在下一字符开始插入A:从光标所在行的最后一个字符开始插入 o,O 进入插入模式(Insert mode)o:在目前光标所在处下一行插入新的一行O:在目前光标所在处上一行插入新的一行

    6.2K11
    领券