2011-07-29 6 views
2

현재 IME를 개발 중이며 커서가있는 줄과 문자 같은 것을 해결하려면 텍스트 내용을 알아야합니다. 이 기능은 전체 화면 모드에서 텍스트 추출과 함께 작동하지만 전체 화면을 적용하지 않아도됩니다.Android IME, EditText 인스턴스 가져 오기

private ExtractEditText mExtract; 

...

mExtract = new ExtractEditText(this); 
    mExtract.setId(android.R.id.inputExtractEditText); 
    setExtractView(mExtract); 

...

@Override public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd) { 
    super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd, candidatesStart, candidatesEnd); 
    String textToMeasure = mExtract.getText().toString().substring(0, newSelStart); 
    Log.w("myIME", "Line: " + countLines(textToMeasure)); 
} 

답변

4

내가 InputMethodService의 소스에보고하고 텍스트를 추출하는 방법을 발견 : 여기 내 현재의 구현의 관련 코드는 따라서 ExtractEditText를 사용하여 솔루션을 만들 수있었습니다.

private String getExtractText() { 
    ExtractedTextRequest req = new ExtractedTextRequest(); 
    req.token = 0; 
    req.flags = InputConnection.GET_TEXT_WITH_STYLES; 
    req.hintMaxLines = 10; 
    req.hintMaxChars = 10000; 
    ExtractedText et = getCurrentInputConnection().getExtractedText(req, InputConnection.GET_EXTRACTED_TEXT_MONITOR); 
    return et.text.toString(); 
} 
+2

누군가가 관심이 있다면 InputMethodService의 startExtractingText (boolean inputChanged) void – Dan2552

+1

edittext에 입력 된 행 수를 얻는 방법을 알고 계십니까? – Aniket