Поместите курсор в конец текста в EditText - PullRequest
796 голосов
/ 02 июня 2011

Я изменяю значение EditText на keyListener.

Но когда я меняю текст, курсор перемещается в начало EditText. Мне нужно, чтобы курсор был в конце текста.

Как переместить курсор в конец текста в EditText.

Ответы [ 24 ]

1225 голосов
/ 08 июля 2011

Попробуйте это:

EditText et = (EditText)findViewById(R.id.inbox);
et.setSelection(et.getText().length());
210 голосов
/ 16 декабря 2011

Существует функция append for ediitext, которая добавляет строковое значение к текущему значению edittext и помещает курсор в конец значения.Вы можете использовать строковое значение в качестве текущего значения электронного поля и вызвать append ();

myedittext.append("current_this_edittext_string"); 
111 голосов
/ 08 июня 2017

Kotlin :

установить курсор в начальную позицию :

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

установить курсор в конец EditText :

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

Ниже кода необходимо поместить курсор после второго символа:

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

JAVA :

установить курсор в начальную позицию :

 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());

Ниже кода необходимо поместить курсор после второго символа:

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
68 голосов
/ 16 апреля 2013

Если вы вызывали setText ранее и новый текст не получил фазовый вызов макета setSelection в отдельном исполняемом файле, запущенном View.post(Runnable) (репост из этой темы).

Итак, для меня этот код работает:

editText.setText("text");
editText.post(new Runnable() {
         @Override
         public void run() {
             registerPhone.setSelection("text".length());
         }
});

Редактировать 16.05.2009: Сейчас я использую расширение Kotlin для этого:

fun EditText.placeCursorToEnd() {
    this.setSelection(this.text.length)
}

, а затем - editText.placeCursorToEnd ().

40 голосов
/ 28 февраля 2013

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

EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
26 голосов
/ 16 октября 2014
editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        editText.setSelection(editText.getText().length());
        return false;
    }
});
19 голосов
/ 06 апреля 2014

Это еще одно возможное решение:

et.append("");

Просто попробуйте это решение, если оно не работает по какой-либо причине:

et.setSelection(et.getText().length());
11 голосов
/ 13 сентября 2018

В моем случае я создал следующий kotlin ext. функция, может быть кому-то полезна

 private fun EditText.focus(){
        requestFocus()
        setSelection(length())
    }

Затем используйте следующее

mEditText.focus()
11 голосов
/ 02 июня 2011

Этого можно добиться с помощью метода EditText setSelection (), см. здесь

10 голосов
/ 17 августа 2015
/**
 * Set cursor to end of text in edittext when user clicks Next on Keyboard.
 */
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (b) {
            ((EditText) view).setSelection(((EditText) view).getText().length());
        }
    }
};

mEditFirstName.setOnFocusChangeListener(onFocusChangeListener); 
mEditLastName.setOnFocusChangeListener(onFocusChangeListener);

Это хорошо для меня!

...