EditText の入力チェック(2)

前回は、XML のアトリビュートで、EditText の入力制限をする方法を探ってみた。今回は、XML のアトリビュートでは実現できなかった入力制限を、Java のコードで実現してみる。以下のコードでは、editText が、EditText のインスタンスだ。

行数を制限する

1行に制限する場合は、EditText のアトリビュートで android:singleLine を true に設定すればよいが、複数行許可したい場合は、自分でコードを書く必要がある。当然のことだが、複数行の入力を許可したい場合は、android:singleLine を false に設定しておかなければならない。

editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER
                && event.getAction() == KeyEvent.ACTION_DOWN) {
            if (((EditText) v).getLineCount() >= <行数>) {
                return true;
            }
        }
        return false;
    }
});

onKey(View, int, KeyEvent)を実装し、改行を行うキーコードが入力した場合の処理を記述すれば行数を制限できる。メソッドの戻り値は、true を戻したときに「メソッドがイベントを消費した」ことを意味するので、指定した行数以上の場合は true を戻して改行コードを無視するようにしている。

入力した文字を任意にチェックする

入力された文字のチェックは、いろいろなパターンが考えられるが、EditText がフォーカスを失ったときに保存するようにしていたので、ついでに入力チェックも行うようにしてみた。

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean flag) {
            if (!flag) {
                String s = editText.getText().toString().trim();
                if (!s.matches("^[0-9]{4}$")) {
                    editText.setText(<元の文字>);
                } else {
                    // テキストの文字列を保存するなど
                }
            }
        }
    });

setOnFocusChangeListener(View.OnFocusChangeListener)メソッドで、フォーカスが変わったときのリスナーをセットして、onFocusChange メソッドの boolean の引数が false の時にチェックを行う。上記の例では、4桁の数字の場合はテキストの文字列を保存し、そうでない場合は元の文字列を設定するようにしている。

Android のウィジェットは、一通りのことができるように見えるのだが、実際にアプリケーションを作ってみるとかゆいところに手が届かない感じがする。作り始める前に、各種ウィジェットを継承したクラスを用意しておいた方が、手間が省けるかもしれない・・・


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.