0

その場で編集テキストに ##.## 形式でユーザーが時間のみを入力できるようにする必要があります。それを達成する方法はありますか? 以下のコードを使用しましたが、目的を果たしません。

edit.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME)

しかし、これにより、いくつかのアルファベットも入力できるようになり、67:344444 のような値が許可されます... 12:59(max) 形式でのみ必要です。 59..それ以下です。

それを達成する方法は?

注: TimePicker クラスは使用しません。ここでは、Edit テキストを使用し、ユーザーが値を Time として入力できるようにする必要があるためです。

それを達成するために私に提案してください。

4

1 に答える 1

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 : "";
于 2012-10-09T12:54:50.813 に答える