我有一個用於在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