Android EditText:如何在触摸时禁用光标移动?

Ale*_*tin 10 android android-edittext

我有EditText,显示类似### - ###的内容.我希望用户只能从第1个位置开始更改此文本.那就是用户不应该在中间触摸#并进行更改.我怎样才能做到这一点?非常感谢.

对不起,我的问题不准确.我想在文本中间禁用甚至点击.

Ter*_*rel 17

如果用户试图通过点击edittext来移动它,则以下代码将强制光标停留在最后位置:

edittext.setCursorVisible(false);

    edittext.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            edittext.setSelection(edittext.getText().length());
        }
    });
Run Code Online (Sandbox Code Playgroud)

请注意,用户仍然可以通过箭头键和/或轨迹球来更改光标的位置.据我所知,目前还没有针对此问题的解决方法.


Mik*_*ael 9

尝试创建一个派生自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());
    }
}
Run Code Online (Sandbox Code Playgroud)


Cas*_*mer -2

您需要实现 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) {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将此 Watcher 添加到您的 EditText 中,如下所示:
myEditText.addTextChangedListener(new MyTextWatcher());

希望这可以帮助。