2013-05-13 68 views
1

我在EditText上有一个TextWatcher,在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()); 
     } 
} 

在Android的4.0V或上级,光标停留在之前,并在2.2v工作正常,但在两个我不能删除字符。

任何人都有同样的问题?

素不相识

回答

2

您的代码看起来不错...

但是,如果你删除一个字符,文本长度为== 2再次和你的代码会自动添加一个“”字符再次 - 所以看起来像删除是不可能的。

+0

删除已得到纠正,但是,例如:“”我想将文本添加到“111”,我想补充editText保持为“111”。 ,但光标退回“”之前一步。当我添加更多文本时,会添加一个空格字符 – 2013-05-13 20:54:57

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

这是不好的解决方案。如果用户移动光标会怎样? – 2017-07-08 19:29:58

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