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

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

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

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

Android EditText每4位自动添加空格效果

看似很小功能,在开发过程,遇到了非常多问题与难点: EditText输入框监听死循环 输入框空格无法删除(删除又添加) 从中间删除一个数字产生一系列问题 输入框光标位置控制问题 之前踩坑过程就不再赘述了...用这种拼接字符方法是为了解决当用户删除中间数字,会导致空格位置错位问题。 当用户删除中间字符时,要记录该动作并且记录光标位置,保证重新排序完成光标的位置在应该在位置。...大概就这2步,就可以实现这个功能,下面一步一来,我们先实现空格添加,保证内容永远满足4位一个空格: 下面先看EditText监听: et_credit_number.addTextChangedListener...String newContent = AppUtils.addSpeaceByCredit(etContent); //如果有改变,则重新填充 //防止EditText无限setText...现在我们就要进行第二步,当用户删除中间字符时,我们要判断用户本次操作是删除字符,并且保存本次删除光标位置,在删除完成、排序完成之后,光标动到保存光标位置。

1.6K30

Android EditText追加空格、限制字符等方法示例

extends android.support.v7.widget.AppCompatEditText { //上次输入框内容 private String lastString; //光标的位置...* @param s 改变字符串 * @param start 改变之后光标下标 * @param before 删除了多少个字符 * @param count 添加了多少个字符 */ @Override...); //保存本次字符串数据 lastString = newContent; //如果有改变,则重新填充 //防止EditText无限setText()产生死循环 if (!...getInputText() { return getText().toString().replaceAll(item, ""); } }   核心思路是在文本改变时获取到原字符串取出每一个字符添加上要追加字符返回字符串并重新...限制字符 借鉴博客Android EditText限制输入字符5种实现方式 et_traveler_content.addTextChangedListener(new TextWatcher()

2.1K10

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.6K10

Android软键盘输入处理技巧

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

34710

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: 向前查找下一个。

23.9K22

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.2K20

快速学习-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

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.1K30

【总结】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] - 当前缓冲区差异推送至另一缓冲区

50921

Android EditText实现输入金额类型详解

前言 众所周知,AndroideditText默认属性里面是没有金额类型,所以要实现这个功能我们就必须自己动手丰衣足食。下面话不多说了,来一起看看详细介绍吧。...EditText editText) { editText.addTextChangedListener(new TextWatcher() { @Override public void...(1); } } } }); } } 我先把我工具类其它方法屏蔽调,只留这个方法。...限制小数点只能输两位 这个判断是判断金额重点,本来金额小数点就只能有两位,当然有些人需求可能是只能有一位,这不要紧,把数字改下就行。...四.最方便方法 没错,要实现这个功能最方便方法就是……跪求谷歌在下一个版本添加一个MONEY类型TYPE,这样就是一代码事情了,呵呵。

1.6K31

让你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.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.2K00

实现Android键盘中英文适配

android:digits属性作用 是设置允许输入哪些字符。...完成了输入,想要以输入内容作为关键字进行搜索时,却需要按下“完成”图标的Enter按键,显然这不符合良好用户体验设计。 ...【A】stateUnspecified:软键盘状态并没有指定,系统选择一个合适状态或依赖于主题设置 【B】stateUnchanged:当这个activity出现时,软键盘一直保持在上一个...//下面这种方法才是真正输入小写字母转换为大写字母 addressText.addTextChangedListener(new TextWatcher() { @Override public...addressText.setText(s.toString().toUpperCase());//转换 addressText.setSelection(s.toString().length());//重新设置光标位置

2.2K10

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.3K20

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

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

2.1K30
领券