安卓如何将EditText光标设置到文本末尾

35

用户需要输入手机号码,手机号码必须是10位数字,我使用了 TextWatcher 来实现这个功能,代码如下所示:

et_mobile.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        if (et_mobile.getText().toString().length() > 10) {
            et_mobile.setText(et_mobile.getText().toString()
                    .subSequence(0, 10));
            tv_mobileError.setText("Just 10 Number");
        }else{
            tv_mobileError.setText("*");
        }
    }
});

但问题在于当用户输入第11个数字时,编辑框的光标会从文本的开头开始,我希望它仍然停留在末尾,怎么办?

3个回答

120

你有两个选择,都应该可以:

a)

editText.setText("Your text");
editText.setSelection(editText.getText().length());
editText.setText("");    
editText.append("Your text");

6
/**
 * Set pointer to end of text in edittext when user clicks Next on KeyBoard.
 */
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (b) {
            ((EditText) view).setSelection(((EditText) view).getText().length());
        }
    }
};

mEditFirstName.setOnFocusChangeListener(onFocusChangeListener);
mEditLastName.setOnFocusChangeListener(onFocusChangeListener);

对我来说它很好用!


0

虽然jenzz的答案适用于最简单的情况,但如果您在编辑文本之前移动光标,它就无法正常工作,因为一旦输入第二个字母,它就会被移到EditText的末尾。

推荐使用以下解决方案:

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) 
            {
                ...
                int position = et_mobile.getSelectionStart();
                et_mobile.setText(f(s));
                et_mobile.setSelection(position);
                ...
            }

请帮忙解释一下这里的 f 是什么意思,我不太理解。 - Ashwini Bhat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接