2013-05-26 70 views
0

我有一个EditText上应等待24小时制时间的意思00:00至23:59的EditText验证

只有两个检查是左

HH应不大于23和mm不应该超过59我需要检查这一点,当用户输入或移动到另一个编辑文本。

2.是应该只有一个(最小值和最大值)签署

我创建这个编辑文本动态代码如下

final EditText timeVisited = new EditText(this); 
    timeVisited.setId(20); 
    timeVisited.setText(Tm); 
    timeVisited.setTextColor(Color.BLACK); 
    timeVisited.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); 
    timeVisited.setHint("eg. 14:30 for 2:30 PM"); 
    timeVisited.setPadding(5,5,5,5); 
    timeVisited.setSingleLine(false); 
    timeVisited.setLines(1); 
    timeVisited.setBackgroundResource(R.drawable.text_bg); 
    customerToCatchTblRow.addView(timeVisited);// add the column to the table row here 
    LinearLayout.LayoutParams params5 = (LinearLayout.LayoutParams)timeVisited.getLayoutParams(); 
    params5.setMargins(0, 0, 5, 0); //substitute parameters for left, top, right, bottom 
    timeVisited.setLayoutParams(params5); 

    //it checks max input is 5 
    int maxLength = 5; 
    InputFilter[] FilterArray = new InputFilter[1]; 
    FilterArray[0] = new InputFilter.LengthFilter(maxLength); 
    timeVisited.setFilters(FilterArray); 

    //It allow only numbers and : 
    InputFilter filter = new InputFilter() 
    { 
     @Override 
     public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) 
     { 
      for (int i = start; i < end; i++) 
      { 
       if (!Character.isDigit(source.charAt(i))&& source.charAt(i) != ':') 
       { 
        return ""; 
       } 
      } 
      return null; 
     } 
    }; 

    timeVisited.setFilters(new InputFilter[]{filter}); 
+2

你有没有尝试过的时间选择器窗口小部件? –

+0

是的,这是不使用完全becoz我使用的是一个表格视图和这个编辑文本创建dinami – Anirban

回答

0

一个办法做到这一点是分裂源变量使用':'作为分隔符,它将返回一个数组。现在检查数组大小,如果它大于2,那么源有两个以上':'。如果不是,则检查array [0]是否小于23,array [1]是否小于59.

代码应该是这样的:(假设source是要解析的变量,isInt检查字符串是否的整数;拆分拆分)

var arr = source.split(':'); 
if(arr.length>2)return false; 
if(isInt(arr[0]) && isInt(arr[1]) && arr[0]<23 && arr[1]<59)return true; 
return false; 

带分隔符的一个字符串,希望这将有助于

+0

但源是CharSequence源 – Anirban

+0

您可以通过使用source.toString()将其转换为字符串 – mrida