Android EditText: как отключить перемещение курсора на ощупь? - PullRequest
9 голосов
/ 16 октября 2011

У меня есть EditText, который отображает что-то вроде ### - ###.Я хочу, чтобы пользователь мог изменять этот текст только с 1-й позиции.То есть пользователь не должен касаться # в середине и менять его.Как я могу это сделать?Большое спасибо.

Извините, я не был точен в своем вопросе.Я хочу отключить даже постукивание в середине текста.

Ответы [ 5 ]

17 голосов
/ 27 ноября 2012

Следующий код заставит курсор оставаться в последней позиции, если пользователь пытается переместить его нажатием на текст редактирования:

edittext.setCursorVisible(false);

    edittext.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            edittext.setSelection(edittext.getText().length());
        }
    });

Обратите внимание, что пользователь все еще может изменить положение курсора с помощьюклавиши со стрелками и / или трекбол.Насколько я знаю, в настоящее время нет решения этой проблемы.

9 голосов
/ 18 ноября 2013

попробуйте создать класс, производный от edittext, и переопределить onSelectionChanged, например,

public class BlockedSelectionEditText extends
    EditText{

    /** Standard Constructors */

    public BlockedSelectionEditText (Context context) {
    super(context);
    }

    public BlockedSelectionEditText (Context context,
        AttributeSet attrs) {
    super(context, attrs);
    }
    public BlockedSelectionEditText (Context context,
        AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    }

    @Override
    protected void onSelectionChanged(int selStart, int selEnd) {
    //on selection move cursor to end of text
    setSelection(this.length());
    }
}
1 голос
/ 17 октября 2011
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;
    }
}

Это «отключит» постукивание в середине вашего текста редактирования

0 голосов
/ 28 мая 2019

это решение также предотвращает касание и перетаскивание, кроме щелчка

       //don't allow user to move cursor
       editText.setOnTouchListener { view, motionEvent ->
            if (motionEvent.action == MotionEvent.ACTION_UP) {
                editText.setSelection(editText.text.length)
            }
            return@setOnTouchListener true
        }
0 голосов
/ 16 октября 2011

Вам необходимо реализовать интерфейс TextWatcher и переопределить три метода, afterTextChanged, beforeTextChanged, onTextChanged (вам может потребоваться только использовать один из них) Например:

public class MyTextWatcher implements TextWatcher {
    @Override
    public void afterTextChanged(Editable arg0) {
        changeItBack();
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }
}

Затем вы добавляете этот Watcher в свой EditText, например:
myEditText.addTextChangedListener(new MyTextWatcher());

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...