2012-10-09 89 views
0

我必須允許用戶在編輯文本中僅輸入##。##格式的時間,有沒有什麼方法可以實現它? 我用下面的代碼,但它並沒有達到目的:如何限制在編輯文本上的輸入時間?

​​

但允許一些字母也進入以及它將允許值的67一樣:344444 ... 我只需要在12 :59(最大)格式,表示在可以輸入冒號最大值之前爲12,並且在冒號最大值可以是59 ..之後。

如何實現它?

注意:我不打算使用TimePicker類,因爲這裏要求使用編輯文本並允許用戶將值輸入爲Time。

請建議我實現它。

+0

你怎麼樣限制你的EditText 5個位數? – Thommy

+0

2 EditText的聲明每個限制,並在後處理中合併這些值。這樣你插入':'並且減輕用戶在他們的鍵盤上找到它? – jnthnjns

+0

可能是http://developer.android.com/reference/java/util/regex/Pattern.html –

回答

1

使用InputFilter用戶輸入的控制:

EditText editText; 
    editText.setFilters(new InputFilter[] { new InputFilter() { 
     @Override 
     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
      // here you can evaluate user input if it's correct or not 
     } 
    } }); 

這是可能的filter方法實現,但它沒有測試

  if (source.length() == 0) { 
       return null;//deleting, keep original editing 
      } 
      String result = ""; 
      result.concat(dest.toString().substring(0, dstart)); 
      result.concat(source.toString().substring(start, end)); 
      result.concat(dest.toString().substring(dend, dest.length())); 

      if (result.length() > 5) { 
       return "";// do not allow this edit 
      } 
      boolean allowEdit = true; 
      char c; 
      if (result.length() > 0) { 
       c = result.charAt(0); 
       allowEdit &= (c >= '0' && c <= '2'); 
      } 
      if (result.length() > 1) { 
       c = result.charAt(1); 
       allowEdit &= (c >= '0' && c <= '9'); 
      } 
      if (result.length() > 2) { 
       c = result.charAt(2); 
       allowEdit &= (c == ':'); 
      } 
      if (result.length() > 3) { 
       c = result.charAt(3); 
       allowEdit &= (c >= '0' && c <= '5'); 
      } 
      if (result.length() > 4) { 
       c = result.charAt(4); 
       allowEdit &= (c >= '0' && c <= '9'); 
      } 
      return allowEdit ? null : ""; 
相關問題