2013-05-27 25 views
1

我有一定的要求,使Android的EditText採取月份和年份(所以我給了提示爲mm/yy)。當用戶輸入月份強制2位數字時,應該可見一個/,例如(11 /)後面是年份。格式編輯文本需要月份和年份

以下是我在editext上使用的代碼。但是,當我按下移動鍵盤上的十字按鈕時,它不會刪除/,但會刪除輸入的月份。有人可以告訴我爲什麼是這種行爲?

ed.addTextChangedListener(new TextWatcher(){ 

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

    } 

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

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if(ed.getText().toString().matches("[0-9]") && ed.getText().toString().length()==2) { 
      month=ed.getText().toString(); 
      ed.setText(month+"/"); 
     } 
    } 
}); 
+0

嘿你這樣做的方式有點複雜。我對這個問題的建議是使用DatePickerDialog。 http://developer.android.com/reference/android/app/DatePickerDialog.html –

回答

0

您可能需要移動控件中的選擇位置以及更改文本。

1

你想達到試試我測試

在XML這兩條線添加到您的EditText以下什麼

android:maxLength="7" 
android:inputType="number" 

添加以下您的活動

public int pos=0; //declare this as global variable 

ed=(EditText)findViewById(R.id.editText1); 
ed.addTextChangedListener(new TextWatcher() { 

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

      if(ed.getText().length()==2 && pos!=3) 
      { ed.setText(ed.getText().toString()+"/"); 
       ed.setSelection(3); 
      } 

     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
      // TODO Auto-generated method stub 
      pos=ed.getText().length(); 
     } 

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

     } 
    }); 

這裏編輯文本只取數字,長度不超過7,當第二個數字輸入/附加到它時

當你位於第3個位置,即在/之後,並且按下後退鍵時,pos變量爲 位置爲2,因此它再次追加/以避免此pos在文本更改前記錄pos,因此當前位置爲3時,返回鍵不會追加/導致刪除/