2013-02-03 26 views
25

用戶必須輸入自己的手機號碼,手機號碼必須是10號,我用TextWatcher做其文本的末尾,這樣機器人如何在EditText上光標設置爲

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個數字時,edittext的光標從文本的開頭開始,我希望它仍然在最後,怎麼樣?

回答

91

你有兩種選擇,兩者都應該工作:

一)

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

B)

editText.setText("");  
editText.append("Your text"); 
0

雖然jenzz anwser適用於最簡單的情況。如果在編輯文本之前移動光標,則不會發生這種情況,因爲只要輸入第二個字母,它就會移動到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); 
       ... 
      } 
+0

什麼是f在這個不明白請幫助 –

3
/** 
* 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); 

它的工作對我好!