Как отключить позиционирование курсора и выделение текста в 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


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

mEditText.setMovementMethod(null);

похоже, лучший способ сделать это, чтобы сделать свой собственный CustomEditText class и переопределить / изменить любые соответствующие методы. Вы можете увидеть исходный код на EditText здесь.

public class CustomEditText extends EditText {

    @Override
    public void selectAll() {
        // Do nothing
    }

    /* override other methods, etc. */

}