2010-08-31 2 views
50

Я хочу вставить постоянную строку в EditText нажатием кнопки. Строка должна быть вставлена ​​в текущую позицию в EditText. Если я использую EditText.append, текст будет вставлен в конец EditText.Android: Вставить текст в EditText в текущей позиции

Как я могу это сделать? Я не мог найти подходящего метода.

ответ

17

Попробуйте использовать EditText.getSelectionStart(), чтобы получить текущую позицию курсора. Затем вы можете использовать String.subString для получения текста до и после курсора и вставки текста в середине.

84

Cpt.Ohlund дал мне правильный намек. Я решил это, частично, используя EditText.getSelectionStart(), но я понял, что вы также можете заменить выделенный текст на то же выражение, и для этого вам не нужно String.subString().

int start = Math.max(myEditText.getSelectionStart(), 0); 
int end = Math.max(myEditText.getSelectionEnd(), 0); 
myEditText.getText().replace(Math.min(start, end), Math.max(start, end), 
     textToInsert, 0, textToInsert.length()); 

Это работает для обоих, вставляя текст в текущую позицию и заменяя любой текст, выбранный пользователем. Math.max() необходим в первой и второй строках, потому что, если в EditText нет выбора или курсора, getSelectionStart() и getSelectionEnd() оба возвращают -1. Math.min() и Math.max() в третьей строке необходимы, поскольку пользователь мог выбрать текст назад и, таким образом, начать иметь более высокое значение, чем конец, который не разрешен для Editable.replace().

+0

работает как шарм –

58

Это кажется проще:

yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz"); 

Однако ответ Мануэль мог бы быть лучше, если вы хотите, чтобы заменить выбранный текст с вставленным текстом.

+1

Это без сомнения лучший ответ. Это должно быть принято. Я не вижу причины изобретать колесо, и он поддерживает «Редактируемый», не перезаписывая его с помощью вызова 'setText(), который имеет решающее значение в большинстве приложений. Самый чистый, простейший и наименее обструктивный для других элементов в «EditText» –

+0

- это быстрее, чем использование подстроки? – has19

+1

Если диапазон текста уже выбран, то просто вставка в начале выделения, вероятно, не является тем, что ожидает пользователь. – Suragch

4

Я думаю, что эта функция поможет вам:

public void insertConstantStr(String insertStr) { 
    String oriContent = editText.getText().toString(); 
    int index = editText.getSelectionStart() >= 0 ? editText.getSelectionStart() : 0; 
    StringBuilder sBuilder = new StringBuilder(oriContent); 
    sBuilder.insert(index, insertStr); 
    editText.setText(sBuilder.toString()); 
    editText.setSelection(index + insertStr.length()); 
} 
+0

Удивительный, пробовал все другие решения, где ни один не работает для Xamarin Android. В Java функция Replace имеет больше параметров, чем в Xamarin. Это просто отлично! – Pierre

Смежные вопросы