ユーザーからの入力を制御するため、android:inputTypeを設定すべきです。
editText.addTextChangedListener( new TextWatcher() { // 文字列sのなかで startの位置から開始されている字数countの文字が、 // 字数lengthの古いテキストを置換するときに呼び出される。 @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } // 文字列sのなかで startの位置から開始されている字数countの文字が、 // 字数lengthの新しいテキストで置換されようとしているときに呼び出される。 @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } // 文字列sのどこかで、テキストが変更されたときに呼び出される。 @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } } );
TextWatcherインターフェイスは3つの抽象メソッドを持つため、必ずこの3つのメソッドを実装します。TextWatcher | Android Developers
これらのメソッドは、
の順で呼び出されます。またsetText()でテキストを変更した場合にも、これらのメソッドのすべてが呼び出されます。
イベントの発生とその引数について検証してみます。イベント名は「TextChanged」の部分を省いて記述します。また引数は、上記のサンプルコードの引数に対応します。
直接入力の状態
1. テキストが空白の状態で、setText( "ABC" )
を実行する。
イベント | 引数 | ||||
---|---|---|---|---|---|
s | start | before | after | count | |
before | 0 | 3 | 0 | ||
on | ABC | 0 | 0 | 3 | |
after | ABC |
2. 末尾に「1」と入力する。
イベント | s | start | before | after | count |
---|---|---|---|---|---|
before | ABC | 3 | 1 | 0 | |
on | ABC1 | 3 | 0 | 1 | |
after | ABC1 |
3. テキストの[BC]の部分を選択し、「2」と入力する。
イベント | s | start | before | after | count |
---|---|---|---|---|---|
before | ABC1 | 1 | 1 | 2 | |
on | A21 | 1 | 2 | 1 | |
after | A21 |
変換入力の状態
1. テキストが空白の状態で、「a」と入力する。
イベント | 引数 | ||||
---|---|---|---|---|---|
s | start | before | after | count | |
before | 0 | 1 | 0 | ||
on | a | 0 | 0 | 1 | |
after | a |
2. 変換候補が表示される。
イベント | s | start | before | after | count |
---|---|---|---|---|---|
before | a | 0 | 1 | 1 | |
on | a | 0 | 1 | 1 | |
after | a |
3. 変換候補から「about」を選択する。
イベント | s | start | before | after | count |
---|---|---|---|---|---|
before | a | 0 | 5 | 1 | |
on | about | 0 | 1 | 5 | |
after | about |
4. 結果が表示される。
イベント | s | start | before | after | count |
---|---|---|---|---|---|
before | about | 5 | 1 | 0 | |
on | about | 5 | 0 | 1 | |
after | about |
public void removeTextChangedListener (TextWatcher watcher)