如何限制在edittext上的输入时间?

时间:2012-10-09 12:39:47

标签: android android-widget

我必须允许用户只在##。##格式中输入动态编辑文本的时间,有没有办法实现呢? 我使用了以下代码,但它没有达到目的:

edit.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME)

但是这也允许输入一些字母表以及它允许​​的值如67:344444 ...... 我只需要12:59(最大)格式,意味着可以输入冒号最大值之前是12而冒号最大值之后可以是59 ......不超过那个。

如何实现它?

注意:我不打算使用TimePicker类,因为这里要求使用Edit文本并允许用户输入值作为Time。

请建议我实现它。

1 个答案:

答案 0 :(得分: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 : "";