我有一个用于在Android上运行的代码编辑器的EditText。我将语法突出显示应用于内容,除了EditText滚动屏幕的大字符串外,它运行良好 - 在每次按键时,语法高亮显示都将应用于整个Spannable。如何仅从EditText获取可见文本
有谁知道我会如何去捕捉只有用户可见的文本?
我只能根据光标位置想到令人讨厌的黑客攻击,但当用户滚动时会崩溃。
我有一个用于在Android上运行的代码编辑器的EditText。我将语法突出显示应用于内容,除了EditText滚动屏幕的大字符串外,它运行良好 - 在每次按键时,语法高亮显示都将应用于整个Spannable。如何仅从EditText获取可见文本
有谁知道我会如何去捕捉只有用户可见的文本?
我只能根据光标位置想到令人讨厌的黑客攻击,但当用户滚动时会崩溃。
可以使用下面的函数来获取可见的文本偏移量。您将输入编辑文本的原始x,y角,并且它将返回最近的文本偏移量(即字符位置)。
EditText et = ;
et.getOffsetForPosition(x, y);
一旦你知道可见文本的开始/结束,就可以相应地设置你的范围。如果你只是改变颜色(即不是高度/宽度),那么就不应该有任何循环依赖。
只是为了澄清,这是否像'int firstVisibleChar = et.getOffsetForPosition(et.getX(),et.getY())'和'int lastVisibleChar = et.getOffsetForPosition(et.getLength(),et.getHeight())'将用于捕获所有可见的文本? – PPartisan
你如何应用语法高亮? – pskink
@pskink - 这不是真的相关我不认为,但我用:spannable.setSpan(新foregroundColorSpan(颜色),matcher.start(),matcher.end(),0); 问题不在于语法突出显示,而是它被应用到EditText的全部内容 - 即使是离屏的内容,所以当编辑一个包含100多行代码的源文件时,事情变得非常缓慢。 – Fiskur
很好,所以首先将它应用于整个缓冲区,然后使用TextWatcher将它应用于新文本 – pskink