2014-03-01 3 views
0

Android에서 실행되는 코드 편집기 용 EditText가 있습니다. 구문 강조를 콘텐츠에 적용하고 있는데 EditText가 화면에서 스크롤되는 큰 문자열을 제외하고는 잘 작동합니다. 구문 강조는 모든 키를 누를 때 전체 Spannable에 적용됩니다.EditText에서 표시되는 텍스트 만 얻는 방법

누구나 내가 볼 수있는 텍스트 만 캡처하는 방법을 알고 있습니까?

나는 커서 위치를 기반으로 불쾌한 해킹을 생각할 수 있지만 사용자가 스크롤 할 때 깨질 수 있습니다.

+0

어떻게 구문 강조를 적용합니까? – pskink

+0

@pskink - 정말 관련이 없지만 사용하고 있습니다 : spannable.setSpan (new ForegroundColorSpan (color), 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

관련 문제