Я меняю значение в положение EditText
ON keyListener
.
Но когда я изменяю текст, курсор перемещается в начало EditText
. Мне нужно, чтобы курсор был в конце текста.
Как переместить курсор в конец текста в EditText
.
Я меняю значение в положение EditText
ON keyListener
.
Но когда я изменяю текст, курсор перемещается в начало EditText
. Мне нужно, чтобы курсор был в конце текста.
Как переместить курсор в конец текста в EditText
.
EditText
s как пунктами aListView
. Что касается экспериментов, я внес некоторые изменения в самListView
исходный код, довольно сложный зверь, и протестирован на эмуляторе. Это было связано с управлением фокусом, сделанным компонентом. Поэтому, конечно, это не решение, которое я мог бы дать, чтобы помочь нашему другу. :)OnFocusChanged
обратного вызова. Решение заключается в том, чтобы поместить setSelection в исполняемый файл и запустить его в главном потоке. Проверьте здесь stackoverflow.com/a/32156989/4514796Ответы:
Попробуй это:
источник
onSelectionChanged()
методEditText
класса:public void onSelectionChanged(int start, int end) { CharSequence text = getText(); if (text != null) { if (start != text.length() || end != text.length()) { setSelection(text.length(), text.length()); return; } } super.onSelectionChanged(start, end); }
Существует функция append for ediitext, которая добавляет строковое значение к текущему значению edittext и помещает курсор в конец значения. Вы можете иметь строковое значение в качестве текущего значения электронного заголовка и вызывать append ();
источник
myedittext.append("");
myedittext.append("");
не работает для меня!Selection
является правильным способом достижения этой ИМО.Котлин :
установить курсор в начальную позицию :
установите курсор в конец EditText :
Код ниже должен поместить курсор после второго символа:
JAVA :
установить курсор в начальную позицию :
установите курсор в конец EditText :
Код ниже должен поместить курсор после второго символа:
источник
findViewById(R.id.edittext_id) as EditText
сfindViewById<EditText>(R.id.edittext_id)
или просто избежать отливку при использованииAPI 26+
Если вы звонили
setText
раньше, и новый текст не получил вызов фазы макетаsetSelection
в отдельном запускаемом файлеView.post(Runnable)
(репост из этой темы).Итак, для меня этот код работает:
Изменить 16.05.2009: Прямо сейчас я использую расширение Kotlin для этого:
а затем - editText.placeCursorToEnd ().
источник
Вы также можете поместить курсор в конец текста в
EditText
представлении следующим образом:источник
источник
Это еще одно возможное решение:
Просто попробуйте это решение, если оно не работает по какой-либо причине:
источник
Это работает хорошо для меня!
источник
В моем случае я создал следующий kotlin ext. функция, может быть кому-то полезна
Затем используйте следующим образом
источник
Если ваш EditText не понятен:
или
источник
Вы должны быть в состоянии достичь этого с помощью
EditText's
методаsetSelection()
, см. Здесьисточник
Я думаю, что это может достичь того, что вы хотите.
источник
Вопрос старый и на него дан ответ, но я думаю, что этот ответ может быть полезным, если вы хотите использовать недавно выпущенные инструменты DataBinding для Android, просто установите его в своем XML:
источник
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point
Курсористочник
Если вы хотите выделить весь текст и просто ввести новый текст вместо старого, вы можете использовать
источник
Это работает
источник
editText.setSelection
это магия здесь По сути, выбор дает вам курсор в любом положении, которое вы хотите.Это помещает курсор в конец EditText. В основном
editText.getText().length()
дает вам длину текста. Тогда вы используетеsetSelection
с длиной.editText.setSelection(0);
Он предназначен для установки курсора в начальную позицию (0).
источник
Все остальные коды, которые я тестировал, не работали хорошо из-за того, что пользователь все еще мог поместить курсор / курсор где угодно в середине строки (например: 12 | 3,00 - где | - курсор). Мое решение всегда помещает курсор в конец строки всякий раз, когда происходит касание EditText.
Окончательное решение:
@ string / amount = "0.00" @ string / zero_value = "0.00"
Надеюсь, поможет!
источник
Для ViewModel, LiveData и привязки данных
Мне нужна была эта функциональность для
EditText
поддержки многострочной печати в моем приложении заметок. Я хотел курсор в конце текста, когда пользователь переходит к фрагменту с текстом заметки.Решение, предложенное djleop, близко. Но проблема в том, что, если пользователь помещает курсор где-то посередине текста для редактирования и начинает печатать, курсор снова переместится в конец текста. Это произошло потому, что
LiveData
выдаст новое значение, а курсор снова перейдет к концу текста, в результате чего пользователь не сможет редактировать текст где-то посередине.Чтобы решить это, я использую
MediatorLiveData
и назначаю ему длинуString
только один раз, используя флаг. Это приведет к тому, что LiveData прочитает значение только один раз, то есть когда пользователь перейдет к фрагменту. После этого пользователь может разместить курсор в любом месте, где он хочет редактировать текст.ViewModel
Вот
yourObject
еще одна LiveData, извлеченная из базы данных, которая содержит текст String, который вы отображаете вEditText
.Затем привяжите это
MediatorLiveData
к вашему EditText, используя привязывающий адаптер.XML
Использует двустороннюю привязку данных для отображения текста и принятия ввода текста.
Связующий адаптер
Event
учебный классEvent
Класс здесь как SingleLiveEvent написанный Хосе Alcérreca от Google. Я использую это здесь, чтобы заботиться о повороте экрана. Использование синглаEvent
гарантирует, что курсор не перейдет к концу текста, когда пользователь редактирует текст где-то посередине и экран поворачивается. Он будет сохранять ту же позицию, когда экран вращается.Вот
Event
класс:Это решение, которое работает для меня и обеспечивает хороший пользовательский опыт. Надеюсь, это поможет и в ваших проектах.
источник
похоже на ответ @Anh Duy, но у меня это не сработало. мне также нужно было, чтобы курсор двигался до конца только тогда, когда пользователь нажимает на текст редактирования и все еще может выбрать позицию курсора впоследствии, это единственный код, который работал для меня
источник
Это делает трюк безопасно :
источник
источник
Приведенные выше ответы не сработали для меня. Итак, я нашел новое решение. Это может быть полезно для кого-то. Я использую последнюю версию Android Studio, то есть 3.5, согласно текущей дате. Возможно, это может быть причиной того, что приведенные выше ответы не дали никакого эффекта.
КОД:
Здесь 1-й аргумент - это текстовое значение Spannable, которое вы хотите воспроизвести, тогда как 2-й аргумент - это значение индекса. Поскольку нам нужен курсор в конце текста, мы взяли getText (). Length (), который возвращает длину текста.
источник
Используйте этот CustomEditText в своем XML-файле, это будет работать. Я проверил это, и это работает для меня.
источник
Если вы хотите поместить курсор в конец текста в представлении EditText
источник