Как установить позицию курсора в EditText?

Есть два EditText, при загрузке страницы в первый EditText установлен текст. Теперь курсор будет в начале EditText, я хочу установить позицию курсора во втором EditText, который не содержит данных. Как это сделать?

Ответ 1

Где позиция - это int:

editText1.setSelection(position)

Ответ 2

Я сделал это так, чтобы установить положение курсора до конца текста после того, как программно обновил текст EditText здесь etmsg - EditText

etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);

Ответ 3

Как установить позицию курсора EditText в Android

Ниже код Установите курсор на "Запуск" в EditText:

 EditText editText = (EditText)findViewById(R.id.edittext_id);
 editText.setSelection(0);

Ниже код Установите курсор для завершения EditText:

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());

Ниже код устанавливается курсором после некоторой позиции 2-го символа:

 EditText editText = (EditText)findViewById(R.id.edittext_id);
 editText.setSelection(2);

Ответ 4

Я хочу установить позицию курсора в edittext, которая не содержит данных

В пустом EditText есть только одна позиция, setSeletion(0).

Или вы имели в виду, что хотите сосредоточиться на своем EditText, когда открывается ваша активность? В этом случае его requestFocus()

Ответ 5

используйте следующую строку

e2.setSelection(e2.length());

e2 - текст редактирования. Имя объекта

Ответ 6

Пусть editText2 является вашим вторым представлением EditText. Затем поместите следующий фрагмент кода в onResume()

editText2.setFocusableInTouchMode(true);
editText2.requestFocus();

или поместите

<requestFocus />

в макете xml второго представления EditText.

Ответ 7

Некоторое время редактирование текстового курсора donot приходит в конкретное положение, если мы непосредственно используем editText.setSelection(position);. В этом случае вы можете попробовать

editText.post(new Runnable() {
                @Override
                public void run() {
                    editText.setSelection(string.length());
                }
            });

Ответ 8

setSelection(int index) метод в Edittext должен позволить вам сделать это.

Ответ 9

в качестве напоминания: если вы используете edittext.setSelection() для установки курсора, и он НЕ работает при настройке alertdialog, например, убедитесь, что вы установили selection() ПОСЛЕ того, как диалог был создан.

Пример:

AlertDialog dialog = builder.show();
input.setSelection(x,y);

Ответ 10

Запомните вызов requestFocus() до setSelection для edittext.

Ответ 11

Этот код поможет вам отобразить курсор на последней позиции редактирования текста.

 editText.requestFocus();
 editText.setSelection(editText.length());

Ответ 12

Я не получаю метод setSelection() напрямую, поэтому я сделал, как показано ниже и работать как шарм

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setText("Updated New Text");
int position = editText.getText().length();
Editable editObj= editText.getText();
Selection.setSelection(editObj, position);

Ответ 13

Если вы хотите установить курсор после символа n из справа налево, тогда вам нужно сделать так.

edittext.setSelection(edittext.length()-n);

Если текст edittext, например

version<sub></sub>

и вы хотите переместить курсор на 6-ю позицию справа

Затем он переместит курсор на -

    version<sub> </sub>
                ^

Ответ 14

Установите курсор на строку и столбец

Вы можете использовать следующий код, чтобы получить позицию в вашем EditText, которая соответствует определенной строке и столбцу. Затем вы можете использовать editText.setSelection(getIndexFromPos(row, column)) для установки положения курсора. Следующие вызовы метода могут быть сделаны:

  • getIndexFromPos(x, y) Перейдите в столбец y строки x
  • getIndexFromPos(x, -1) Перейти к последнему столбцу строки x
  • getIndexFromPos(-1, y) Перейдите к столбцу y последней строки
  • getIndexFromPos(-1, -1) Перейти к последнему столбцу последней строки

Обработка всех строк и столбцов; Ввод столбца, превышающего длину строки, будет возвращать позицию в последнем столбце строки. Ввод строки, превышающей число строк EditText, будет переходить к последней строке. Он должен быть достаточно надежным, так как он был сильно протестирован.

static final String LINE_SEPARATOR = System.getProperty("line.separator");

int getIndexFromPos(int line, int column) {
    int lineCount = getTrueLineCount();
    if (line < 0) line = getLayout().getLineForOffset(getSelectionStart());  // No line, take current line
    if (line >= lineCount) line = lineCount - 1;  // Line out of bounds, take last line

    String content = getText().toString() + LINE_SEPARATOR;
    int currentLine = 0;
    for (int i = 0; i < content.length(); i++) {
        if (currentLine == line) {
            int lineLength = content.substring(i, content.length()).indexOf(LINE_SEPARATOR);
            if (column < 0 || column > lineLength) return i + lineLength;  // No column or column out of bounds, take last column
            else return i + column;
        }
        if (String.valueOf(content.charAt(i)).equals(LINE_SEPARATOR)) currentLine++;
    }
    return -1;  // Should not happen
}

// Fast alternative to StringUtils.countMatches(getText().toString(), LINE_SEPARATOR) + 1
public int getTrueLineCount() {
    int count;
    String text = getText().toString();
    StringReader sr = new StringReader(text);
    LineNumberReader lnr = new LineNumberReader(sr);
    try {
        lnr.skip(Long.MAX_VALUE);
        count = lnr.getLineNumber() + 1;
    } catch (IOException e) {
        count = 0;  // Should not happen
    }
    sr.close();
    return count;
}

Вопрос уже был дан, но я думал, что кто-то захочет это сделать.

Он работает путем циклического прохождения каждого символа, увеличивая количество строк каждый раз, когда находит разделитель строк. Когда количество строк равно требуемой строке, оно возвращает текущий индекс + столбец или индекс конца строки, если столбец выходит за пределы. Вы также можете повторно использовать метод getTrueLineCount(), он возвращает число строк, игнорируя перенос текста, в отличие от TextView.getLineCount().

Ответ 15

EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());

Ответ 16

Если вы хотите установить положение курсора в EditText? попробуйте эти ниже код

EditText rename;
 String title = "title_goes_here";
 int counts = (int) title.length();
 rename.setSelection(counts);
 rename.setText(title);

Ответ 17

Если вы хотите поместить курсор в определенную позицию на EditText, вы можете использовать:

yourEditText.setSelection(position);

Кроме того, есть возможность установить начальную и конечную позицию, чтобы вы могли программно выделить какой-то текст следующим образом:

yourEditText.setSelection(startPosition, endPosition);

Обратите внимание, что установка выделения может быть сложной, так как вы можете поместить курсор перед или после символа, изображение ниже объясняет, как индексирование работает в этом случае:

enter image description here

Итак, если вы хотите, чтобы курсор находился в конце текста, просто установите его в yourEditText.length().

Ответ 18

В kotlin вы можете создать функцию расширения следующим образом:

fun EditText.placeCursorAtLast() {
    val string = this.text.toString()
    this.setSelection(string.length)
}

а затем просто вызовите myEditText.placeCursorAtLast()

Ответ 19

В Xml файле android: paddingLeft:

<EditText
    android:id="@+id/txt_amount"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"/>

я надеюсь, что это поможет вам

Ответ 20

Я считаю, что самый простой способ сделать это - просто использовать padding.

Скажите в разделе xml edittext, добавьте   андроид: paddingLeft = "100dp" Это переместит вашу начальную позицию курсора 100dp справа от левого конца.

То же самое можно использовать   андроид: paddingRight = "100dp" Это переместит ваше конечное положение курсора 100dp слева от правого конца.

Подробнее об этом читайте в блоге: Android: настройка курсора Запуск и завершение позиции в виджетах EditText