EditTextに文字列を追加する場合、append()というメソッドを使うが、これは常に編集テキストの末尾に文字列が追加されてしまう。
EditTextの末尾ではなく、カーソル位置に文字列を挿入したい場合にはこうする。
自前でなんとかする
EditTextには、カーソル位置に文字列を挿入するというメソッドはないので、自前でなんとかするしかない。
考え方はこうだ。EditTextからテキストを取り出し、単なる文字列処理で文字列の挿入をおこなう。
- getSelectionStart()とgetSelectionEnd()で選択範囲の先頭と末尾の位置を得る。テキストが選択されていない場合にはstart = endとなり、カーソル位置をあらわす。
- Editable#replace()メソッドを使って文字列置換。
- 選択範囲を置換できるように、start != endの場合も考慮する。選択の仕方によってはstartとendの大小が逆転している可能性もあるのでそれも考慮する。
以上をまとめると、次のように書ける。
String replaceText = "inserted text"; int start = editText.getSelectionStart(); int end = editText.getSelectionEnd(); Editable editable = editText.getText(); editable.replace( Math.min( start, end ), Math.max( start, end ), replaceText );
0 コメント:
コメントを投稿