EditText, как можно управлять курсором в TextWatcher?

У меня есть TextWatcher на EditText, в методе afterTextChanged я добавляю символы в EditText, затем я перемещаю курсор в конец EditText для продолжения добавления текста, но у меня есть проблемы с этим.

Как это:

public void afterTextChanged(Editable s) {

    if(edittext.getText().length()==2){

        // append dot to edittext
        edittext.append(".");
        // move cursor at end position in EditText
        edittext.setSelection(edittext.getText().length());
      }
}

В Android 4.0v или выше курсор остается перед ".", и в 2.2v работает нормально, но в обоих я не могу удалить символы.

Кто-нибудь с такой же проблемой?

Grettings

3 ответа

Вы можете сделать что-то подобное, чтобы избежать проблемы удаления...

public class MainActivity extends Activity {
    int count=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText edittext=(EditText)findViewById(R.id.editText1);

        edittext.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable ed) {
                // TODO Auto-generated method stub

                 if(edittext.getText().length()==2 && count < 3){

                        // append dot to edittext
                        edittext.append(".");
                        // move cursor at end position in EditText
                        edittext.setSelection(edittext.getText().length());
                      }
                 count=edittext.getText().length();
            }
        });
    }
new TextWatcher() {

    int startChanged,beforeChanged,countChanged;

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

    }

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

        startChanged = start;
        beforeChanged = before;
        countChanged = count;
    }


    public void afterTextChanged(Editable s) {
            ...your code here....
            myEditText.setSelection(startChanged+countChanged);
            ...your code here...
        }
    }
};

Ваш код выглядит хорошо...

Но если вы удалите символ, длина текста снова == 2, и ваш код автоматически добавит "." char снова - похоже, что удаление невозможно.

Другие вопросы по тегам