Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从编辑文本中仅获取可见文本_Android_Android Edittext - Fatal编程技术网

Android 如何从编辑文本中仅获取可见文本

Android 如何从编辑文本中仅获取可见文本,android,android-edittext,Android,Android Edittext,我有一个在Android上运行的代码编辑器的EditText。我将语法高亮显示应用到内容中,除了EditText在屏幕上滚动的大字符串外,它工作得很好-语法高亮显示应用到每个按键上的整个可扩展文本 有人知道我如何只捕获用户可见的文本吗 我只能想到基于光标位置的恶意攻击,但当用户滚动时,这种攻击就会中断。可以使用下面的函数获取可见的文本偏移量。输入编辑文本的原始x、y角,它将返回最近的文本偏移量(即字符位置) 一旦知道可见文本的开始/结束,就可以相应地设置跨度。如果只是更改颜色(即不是高度/宽度)

我有一个在Android上运行的代码编辑器的EditText。我将语法高亮显示应用到内容中,除了EditText在屏幕上滚动的大字符串外,它工作得很好-语法高亮显示应用到每个按键上的整个可扩展文本

有人知道我如何只捕获用户可见的文本吗


我只能想到基于光标位置的恶意攻击,但当用户滚动时,这种攻击就会中断。

可以使用下面的函数获取可见的文本偏移量。输入编辑文本的原始x、y角,它将返回最近的文本偏移量(即字符位置)


一旦知道可见文本的开始/结束,就可以相应地设置跨度。如果只是更改颜色(即不是高度/宽度),则不应存在任何循环相关性。

可以使用下面的函数获取可见文本偏移。输入编辑文本的原始x、y角,它将返回最近的文本偏移量(即字符位置)


一旦知道可见文本的开始/结束,就可以相应地设置跨度。如果只是更改颜色(即不是高度/宽度),则不应存在任何循环依赖关系。

如何应用语法高亮显示?@pskink-我认为这并不相关,但我使用的是:spannable.setSpan(新的ForegroundColorSpan(颜色),matcher.start(),matcher.end(),0);问题不在于语法突出显示,而在于它被应用于EditText的整个内容——甚至是屏幕外的内容,因此当编辑一个包含100多行代码的源文件时,事情变得非常缓慢。太好了,所以首先将其应用于整个缓冲区,然后使用TextWatcher将其仅应用于新文本这是一个很棒的想法,太简单了!但是回到原来的问题,请参阅TextView.getLayout()如何应用语法突出显示?@pskink-我认为这并不相关,但我使用的是:spannable.setSpan(新的ForegroundColorSpan(color),matcher.start(),matcher.end(),0);问题不在于语法突出显示,而在于它被应用于EditText的整个内容——甚至是屏幕外的内容,因此当编辑一个包含100多行代码的源文件时,事情变得非常缓慢。太好了,所以首先将其应用于整个缓冲区,然后使用TextWatcher将其仅应用于新文本这是一个很棒的想法,太简单了!但是回到原来的问题,请参阅TextView.getLayout()只是为了澄清,这是否意味着类似于
int firstVisibleChar=et.getOffsetForPosition(et.getX(),et.getY())
int lastVisibleChar=et.getOffsetForPosition(et.getLength(),et.getHeight())
将用于捕获所有可见文本?@PPartisan这似乎是真的。我刚刚用一个不适合可见区域的文本进行了尝试。但是它应该是
et.getWidth()
,因为
et.getLength()
不存在。只是澄清一下,这是否意味着类似
int firstVisibleChar=et.getOffsetForPosition(et.getX(),et.getY())
int-lastVisibleChar=et.getOffsetForPosition(et.getLength(),et.getHeight())
将用于捕获所有可见文本?@PPartisan这似乎是真的。我刚刚用一个不适合可见区域的文本进行了尝试。但是它应该是
et.getWidth()
,因为
et.getLength()
不存在。
    EditText et = ;
    et.getOffsetForPosition(x, y);