2

我需要让用户以格式输入时间hh:mm,但由于问题 28132我无法使用

<EditText ... android:inputType="time">

我以为我会接受任何分隔符,例如hh mmor之类的东西hh.mm,但也不能输入这样的字符(合乎逻辑,因为它们不属于时间;冒号可以,但键盘上缺少)。将类型更改为text会起作用,但文本键盘不适合打字。

所以我想在编辑开始之前删除冒号并在编辑结束时将其放回,但我不知道如何识别这些事件。addTextChangedListener允许跟踪所有细粒度的更改,但我认为在编辑文本期间更改文本没有意义,我宁愿需要像editStartsand之类editEnds的事件,对应于显示和隐藏键盘。他们是这样的事件吗?

您会推荐什么解决此错误的方法?

4

1 回答 1

0

您应该为 TextView 使用InputFilter并验证输入是否为 Time 类型。

因为 TimeKeyListener 也实现了一个 InputFilter。

你可能会使用

 TextView.setInputFilter({new TimeKeyListener()});

编辑:或者你甚至可以自定义时间键监听器作为公认的角色

    edittext.setKeyListener(new TimeKeyListener() {
        public final char[] CHARS = new char[] {
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'm', 'p', ':', '.'
        };

        @Override
        protected char[] getAcceptedChars() {
            return CHARS;
        }
    });

现在用冒号替换备用分隔符(点)也很容易,如下所示:

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    final CharSequence superSource = super.filter(source, start, end, dest, dstart, dend);
    final CharSequence prefilteredSource = superSource!=null ? superSource : source;
    return prefilteredSource.toString().replace('.', ':');
}
于 2012-09-15T21:08:48.343 回答