Лучший способ получить весь текст в EditText из InputConnection? - PullRequest
11 голосов
/ 16 сентября 2011

Я написал IME (InputMethodService), и мне нужно получить весь текст из EditText, который он редактирует. Я знаю один способ:

InputConnection inputConnection = getCurrentInputConnection();
inputConnection.append(inputConnection.getTextBeforeCursor(9999, 0))
.append(inputConnection.getTextAfterCursor(9999, 0));

Это работает, но кажется довольно глупым и неуклюжим. Однако такого метода не существует InputConnection.getText().

Есть ли лучший способ?

P.S. Я не могу получить доступ к EditText из своего IME, потому что он принадлежит родительскому приложению, поэтому, пожалуйста, не говорите мне использовать EditText.getText (), если вы не знаете способ получить EditText!

Ответы [ 2 ]

18 голосов
/ 27 июня 2012

Мое решение - использовать getExtractedText ().Я не уверен, имеет ли это какие-то ограничения, но до сих пор работал для меня.

CharSequence currentText = inputConnection.getExtractedText(new ExtractedTextRequest(), 0).text;
6 голосов
/ 16 сентября 2011

Вот еще один способ сделать это:

inputConnection.performContextMenuAction(android.R.id.selectAll);
CharSequence sData =  inputConnection.getSelectedText(0);
...