Android: вставьте текст в EditText в текущей позиции - PullRequest
57 голосов
/ 31 августа 2010

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

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

Ответы [ 4 ]

90 голосов
/ 31 августа 2010

Cpt. Охлунд дал мне правильный намек.Теперь я решил это частично с помощью 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() в третьей строке необходимы, потому что пользователь мог выбрать текст в обратном направлении и, таким образом, start будет иметь более высокое значение, чем end, что не допускается для Editable.replace().

72 голосов
/ 09 июня 2014

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

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

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

19 голосов
/ 31 августа 2010

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

5 голосов
/ 23 ноября 2014

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

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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...