EditTextの文字入力制限をかける際にXmlのmaxLengthの属性が無視されるのを回避する

はじめに

こんにちは、お久しぶりです。

すっかり忙しくて更新を忘れていました、@zukkeyです。

 

今日はEditTextをいじっていて気づいたことがあったので、その際のメモを残しておこうと思います。

 

EditTextの入力制限について Androidの開発をしたことがある人なら、EditTextは何回も触ったことがあると思います。

EditTextに入力制限をかける際に、文字数を制限する場合、下記のようにXmlに文字数を制限したいときにmaxLengthとmaxLinesを指定して制限すると思います。

 

 

ただ、文字数の制限だけではなくそれ以上に入力の文字を変えたい場合InputFilterを用意して制限をかける必要があります。

 

例えば、数字にしたいときにinputTypeをnumberにすれば良いですが、さらに数字の範囲を決めたい場合は下記のようにInputFilterを用意してEditTextに入れる必要があります。

上のコードでは、Filterを用意し正規表現で0から5の範囲の数字だけ入力できるように制限しています。

 

こうすることでEditTextに独自の入力制限を入れることができますが、このまま実行すると下記のような現象が起きます。

 

文字の範囲の制限をかけることはできていますが、Xmlで指定したはずのmaxLengthの入力制限が外れています。

xmlで指定したとしても、新たにfilterを追加するとmaxLengthのattributeが無視されてしまうようです(2018年8月現在)。

 

この場合は下記のように実装します。

 

InputFilterの中にLengthFilterという関数があり、こちらで最大文字数を指定してfilterのリストに加える必要があります。

この状態で実行すると下記のようになります。

 

 

上の通り、一文字だけしか入力できないようになっているのを確認できます。

現状では、Filterをセットするとxmlのattributeが無視されてしまうので気をつけてください。

 

おわりに

今日は、EditTextをいじっていてちょっとハマったので同じようにハマっている人の助けになれたら嬉しいです。

最近不定期になりつつありますが、暇を見つけて更新していきたいと思います。