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

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

Solutions Collecting From Web of "Как установить позицию курсора в EditText?"

Где позиция int:

 editText1.setSelection(position) 

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

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

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

Ниже кода установлен курсор для EditText в 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); 

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

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

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

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

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

Или положить

 <requestFocus /> 

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

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

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

пример:

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

Используйте нижнюю строку

 e2.setSelection(e2.length()); 

e2 – текст редактирования Название объекта

Я не получаю метод 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); 

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

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

Если текст edittext

 version<sub></sub> 

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

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

  version<sub> </sub> ^ 

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

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

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

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

Вы можете использовать следующий код, чтобы получить позицию в вашем 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() .

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

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

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

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

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

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

Для более подробной информации, прочтите эту статью в своем блоге : Android: настройка курсора Запуск и завершение позиции в EditText Widget