2

ユーザーに形式で時間を入力させる必要がありますが、 28132hh:mmの問題のため、使用できません

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

hh mmまたはのような区切り文字を受け入れると思いましhh.mmたが、そのような文字も入力できません(時間に属していないため論理的です。コロンはありますが、キーボードから欠落しています)。タイプをに変更してtextも機能しますが、テキストキーボードはタイピングには適していません。

そのため、編集を開始する直前にコロンを削除し、編集が終了したときにコロンを元に戻すことを考えましたが、これらのイベントを認識する方法がわかりません。addTextChangedListenerすべてのきめ細かい変更を追跡できますが、編集にテキストを変更するのは意味がないと思います。キーボードの表示と非表示に対応する、editStartsやのようなイベントが必要です。それらはそのようなイベントですか?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 に答える