EditTextでテキストの変更を検出する必要があります。私はTextWatcherを試しましたが、それは私がそれを期待する方法で動作しません。 onTextChanged方法を取る:EditTextの変更を検出する(TextWatcherは無効です)
public void onTextChanged(CharSequence s, int start, int before, int count)
は、私がのEditTextで既にテキスト「ジョン」を持っていると言います。別のキー "e"を押すと、 "Johne"、start
は0になり、before
は4になり、count
は5になります。この方法が動作すると予想される方法は、以前のEditTextそして、それが何になるのか。
s = "Johne"
start = 4 // inserting character at index = 4
before = 0 // adding a character, so there was nothing there before
count = 1 // inserting one character
私はキーが押されるたびに、個々の変更を検出できるようにする必要があります。だから私はテキスト "ジョン"がある場合、私は "e"がインデックス4に追加されたことを知る必要があります。 "e"をバックスペースすると、 "e"がインデックス4から削除されたことを知る必要があります。バックスペースでは、 "J"がインデックス0から削除されたことを知る必要があります。 "G"を "J"にした場合、インデックス "0"で "G"を "J"に置き換えます。
私はこれを達成することはできますか?私はこれを行うための信頼できる方法を考えることができません。
は、クリップボードから貼り付けについてのEditText –
何のためにonKeyListenerみては? –
もう1つの問題は、テキスト範囲が選択されているということです。任意のTextWatcherメソッドで、テキストが選択されているかどうかにかかわらず、getSelectionStartとEndは常に同じインデックスです。 –