Есть два 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);
Обратите внимание, что установка выделения может быть сложной, так как вы можете поместить курсор перед или после символа, изображение ниже объясняет, как индексирование работает в этом случае:
Итак, если вы хотите, чтобы курсор находился в конце текста, просто установите его в 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