2013-05-13 4 views
1

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

Как это:

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()); 
     } 
} 

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

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

Grettings

ответ

2

Ваш код выглядит нормально ...

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

+0

Стирание была исправлена, но, к примеру: Я хочу, чтобы добавить текст в «111», добавить «» editText остается как "111." , но курсор назад на один шаг до "." и когда я добавляю больше текста, добавляется пробел. –

5

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

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(); 
      } 
     }); 
    } 
+0

Это плохое решение. Что делать, если пользователь перемещает курсор? –

0
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... 
     } 
    } 
};