EditText のカーソル位置を移動させるには
EditText のカーソル位置を移動させるには setSelection(index) を呼び出します。
例えば、9文字("123456789")のテキストが設定されている EditText があった場合、
カーソル位置を 8 文字目の右の位置に移動させるには、setSelection(8) を呼び出します。
![]()
同様に、カーソル位置を 9 文字目の右の位置に移動させるには、setSelection(9) を呼び出します。
(ここでの 9 文字目は、テキストの最後の位置です。)
![]()
では、カーソル位置を 0 文字目、つまり、テキストの先頭に移動させたい場合はどうでしょうか?
これまでの流れから setSelection(0) で良さそうなのですが、
実際の実行結果は、以下のように期待どおりになりませんでした。。。
![]()
色々と調べたのですが、バグなのか仕様なのかわからず、試行錯誤した結果、
カーソル範囲選択である setSelection(start, stop) を呼び出した後に、
setSelection(0) を呼び出してあげると上手くいくことがわかりました。。。
![]()
くっ、苦しすぎる・・・。
もっと良い方法はないんでしょうか・・・。
ソースコード
EditText editText = (EditText) findViewById(id.edit_text);
editText.setText("123456789");
editText.setSelection(0, editText.getText().length());
editText.setSelection(0);
おまけ
上記の例の場合、selSelection(0, editText.getText().length()) は setSelection(0, 9) の呼び出しと等しく、
実行結果は以下のようテキストの全選択とになります。
![]()
