Подтвердить что ты не робот

Как отключить позиционирование курсора и выбор текста в EditText? (Android)

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

Чтобы уточнить: пользователь должен иметь возможность вставлять текст, но только в конце.

4b9b3361

Ответ 1

У меня была та же проблема. Это закончилось для меня работой:

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

}

Ответ 2

Это будет reset курсор фокус на последнюю позицию текста

editText.setSelection(editText.getText().length());

Этот метод отключит перемещение курсора при касании

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

андроида: cursorVisible

или java-функция

setCursorVisible (булево)

чтобы отключить мигающий курсор edittext

Ответ 3

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

public class CustomEditText extends EditText {

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

    /* override other methods, etc. */

}

Ответ 4

Попробуйте следующее:

mEditText.setMovementMethod(null);