Как установить положение курсора в EditText?



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

1049   17  

17 ответов:

где позиция-это 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)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()

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

e2.setSelection(e2.length());

e2 изменить имя текстового объекта

пусть 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());
                }
            });

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

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

пример:

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

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

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

 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 строки 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().

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

    Ничего не найдено.