TextWatcherで確定済みの文字列だけ取得する
EditTextに入力されている内容や文字数を追う際、下記のようにTextWatcherをaddすると思います。
その時、IMEで入力中のものは除き既に確定しているもののみ取得したい時、どのコールバックの引数を参照すればいいかメモ。
editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { Log.d("[TextWatcher]", "beforeTextChanged s=" + s + ", start=" + start + ", count=" + count + ", after=" + after); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { Log.d("[TextWatcher]", "onTextChanged s=" + s + ", start=" + start + ", count=" + count); } @Override public void afterTextChanged(Editable s) { Log.d("[TextWatcher]", "afterTextChanged s=" + s); } });
色々入力してみながらログ確認。
// 「あ」を入力し未確定 D/[TextWatcher]: beforeTextChanged s=, start=0, count=0, after=1 D/[TextWatcher]: onTextChanged s=あ, start=0, count=1 D/[TextWatcher]: afterTextChanged s=あ // 「あ」を確定 D/[TextWatcher]: beforeTextChanged s=あ, start=0, count=1, after=1 D/[TextWatcher]: onTextChanged s=あ, start=0, count=1 D/[TextWatcher]: afterTextChanged s=あ // 「い」を追加入力し未確定 D/[TextWatcher]: beforeTextChanged s=あ, start=1, count=0, after=1 D/[TextWatcher]: onTextChanged s=あい, start=1, count=1 D/[TextWatcher]: afterTextChanged s=あい // 「い」を確定 D/[TextWatcher]: beforeTextChanged s=あい, start=1, count=1, after=1 D/[TextWatcher]: onTextChanged s=あい, start=1, count=1 D/[TextWatcher]: afterTextChanged s=あい // 「あ」と「い」の間にカーソルを移動し、「あ」を入力し未確定 D/[TextWatcher]: beforeTextChanged s=あい, start=1, count=0, after=1 D/[TextWatcher]: onTextChanged s=ああい, start=1, count=1 D/[TextWatcher]: afterTextChanged s=ああい