Как установить положение курсора в EditText?
есть два EditText, при загрузке страницы текст устанавливается в первый EditText, поэтому теперь курсор будет находиться в начальном месте EditText, Я хочу установить положение курсора во втором EditText, который не содержит данных. Как это сделать?
17 ответов:
Я сделал этот способ, чтобы установить положение курсора в конец текста после обновления текста EditText программно вот,
etmsgЭто EditTextetmsg.setText("Updated Text From another Activity"); int position = etmsg.length(); Editable etext = etmsg.getText(); Selection.setSelection(etext, position);
Как установить позицию курсора 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);
Я хочу установить положение курсора в edittext, который не содержит данных
есть только одна позиция в пустом EditText, это
setSeletion(0).или вы имели в виду, что вы хотите, чтобы сосредоточиться на вашем
EditTextкогда открывается ваша активность? В таком случае егоrequestFocus()
пусть editText2 - это ваше второе представление EditText .затем поместите следующий фрагмент кода в onResume()
editText2.setFocusableInTouchMode(true); editText2.requestFocus();или поставить
<requestFocus />в вашем XML-макете второго представления EditText.
некоторое время редактировать текстовый курсор донот приходит в определенное положение, если мы непосредственно используем
editText.setSelection(position);. В этом случае вы можете попробоватьeditText.post(new Runnable() { @Override public void run() { editText.setSelection(string.length()); } });
как напоминание: Если вы используете
edittext.setSelection()установить курсор, и он не работает при настройкеalertdialogнапример, убедитесь в том, чтобы установитьselection()после создания диалогового окнапример:
AlertDialog dialog = builder.show(); input.setSelection(x,y);
этот код поможет вам показать курсор в последней позиции редактирования текста.
editText.requestFocus(); editText.setSelection(editText.length());
Я не получу метод 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> ^
установите курсор на строку и столбец
вы можете использовать следующий код, чтобы получить позицию в вашем EditText, которая соответствует определенной строке и столбцу. Затем вы можете использовать
editText.setSelection(getIndexFromPos(row, column))для установки положения курсора. Следующие вызовы метода могут быть:
getIndexFromPos(x, y)перейти к столбцу y строки xgetIndexFromPos(x, -1)перейти к последнему столбцу строки xgetIndexFromPos(-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().
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length());
в 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
Comments