2014-03-01 49 views
0

我有一個用於在Android上運行的代碼編輯器的EditText。我將語法突出顯示應用於內容,除了EditText滾動屏幕的大字符串外,它運行良好 - 在每次按鍵時,語法高亮顯示都將應用於整個Spannable。如何僅從EditText獲取可見文本

有誰知道我會如何去捕捉只有用戶可見的文本?

我只能根據光標位置想到令人討厭的黑客攻擊,但當用戶滾動時會崩潰。

+0

你如何應用語法高亮? – pskink

+0

@pskink - 這不是真的相關我不認爲,但我用:spannable.setSpan(新foregroundColorSpan(顏色),matcher.start(),matcher.end(),0); 問題不在於語法突出顯示,而是它被應用到EditText的全部內容 - 即使是離屏的內容,所以當編輯一個包含100多行代碼的源文件時,事情變得非常緩慢。 – Fiskur

+1

很好,所以首先將它應用於整個緩衝區,然後使用TextWatcher將它應用於新文本 – pskink

回答

2

可以使用下面的函數來獲取可見的文本偏移量。您將輸入編輯文本的原始x,y角,並且它將返回最近的文本偏移量(即字符位置)。

EditText et = ; 
    et.getOffsetForPosition(x, y); 

一旦你知道可見文本的開始/結束,就可以相應地設置你的範圍。如果你只是改變顏色(即不是高度/寬度),那麼就不應該有任何循環依賴。

+0

只是爲了澄清,這是否像'int firstVisibleChar = et.getOffsetForPosition(et.getX(),et.getY())'和'int lastVisibleChar = et.getOffsetForPosition(et.getLength(),et.getHeight())'將用於捕獲所有可見的文本? – PPartisan