34

ユーザーは自分の携帯電話番号を入力する必要があります。携帯電話番号は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番目の数字を入力したときに、編集テキストのカーソルがテキストの先頭から開始することです。それでも最後に配置したいのですが、どうすればよいでしょうか。

4

3 に答える 3

117

2つのオプションがあり、どちらも機能するはずです。

a)

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

b)

editText.setText("");    
editText.append("Your text");
于 2013-02-03T14:53:46.423 に答える
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);

それは私にとってうまくいきます!

于 2015-08-17T08:48:24.270 に答える
0

jenzz anwserは、最も単純なケースで機能します。2番目の文字を入力するとすぐに、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);
                ...
            }
于 2015-02-03T02:48:33.247 に答える