Как отключить позиционирование курсора и выделение текста в EditText? (Андроид)
Я ищу способ предотвратить перемещение пользователем позиции курсора в любом месте. Курсор всегда должен находиться в конце текущего значения EditText. В дополнение к этому пользователь не должен иметь возможности выбирать что-либо в EditText. Вы знаете, как это реализовать в Android с помощью EditText?
уточнить: пользователь должен иметь возможность вставить текст, но только в конце.
4 ответов
У меня была та же проблема. Это закончилось для меня работой:
public class CustomEditText extends EditText {
@Override
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);
}
}
это сбросит фокус курсора до последней позиции текста
editText.setSelection(editText.getText().length());
этот метод отключит перемещение курсора на touch
public class MyEditText extends EditText{
@Override
public boolean onTouchEvent(MotionEvent event)
{
final int eventX = event.getX();
final int eventY = event.getY();
if( (eventX,eventY) is in the middle of your editText)
{
return false;
}
return true;
}
}
и вы можете использовать либо атрибут xml
android: cursorVisible
или функция java
setCursorVisible (boolean)
чтобы отключить мигающий курсор edittext
похоже, лучший способ сделать это, чтобы сделать свой собственный CustomEditText
class и переопределить / изменить любые соответствующие методы. Вы можете увидеть исходный код на EditText
здесь.
public class CustomEditText extends EditText {
@Override
public void selectAll() {
// Do nothing
}
/* override other methods, etc. */
}