android : EditTextにonChangeイベントを追加する
テキスト入力部の文字数をリアルタイムで表示したい!…と思って調べてみた。
当初、他の処理系の癖かonChangeイベントはー?とか探してしまったのだが、どうやらTextChangedイベントを利用する模様。
Activity内でまずaddTextChangedListenerする。Listenerは、TextWatcherインタフェースをimplementsしてないとダメ。もちろんActivityにimplementsして、thisでもOK。
((EditText) findViewById(R.id.edittext)).addTextChangedListener(new onTextChanged());
で、TextWatcherをimplementsしたクラスを用意する。クラスは必ずメソッドとして
- afterTextChanged
- beforeTextChanged
- onTextChanged
を実装する必要がある。
試しにEditTextの長さを別のTextViewに表示させてみた。
private class onTextChange implements TextWatcher{ public void afterTextChanged(Editable arg0) { } public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } public void onTextChanged(CharSequence s, int start, int before, int count) { int txtLength = s.length(); ((TextView) findViewById(targetId)).setText(Integer.toString(txtLength) + "/50"); int txtCol = Color.GREEN; if (txtLength>50) txtCol = Color.YELLOW; if (txtLength>70) txtCol = Color.RED; ((TextView) findViewById(targetId)).setTextColor(txtCol); } }
無事に文字数は表示された模様…Byte数表示にするにはどうすりゃいいんだろ。