2012年3月4日

EditTextのカーソル位置に文字列を挿入


EditTextに文字列を追加する場合、append()というメソッドを使うが、これは常に編集テキストの末尾に文字列が追加されてしまう。

EditTextの末尾ではなく、カーソル位置に文字列を挿入したい場合にはこうする。

自前でなんとかする


EditTextには、カーソル位置に文字列を挿入するというメソッドはないので、自前でなんとかするしかない。

考え方はこうだ。EditTextからテキストを取り出し、単なる文字列処理で文字列の挿入をおこなう。


  1. getSelectionStart()とgetSelectionEnd()で選択範囲の先頭と末尾の位置を得る。テキストが選択されていない場合にはstart = endとなり、カーソル位置をあらわす。
  2. Editable#replace()メソッドを使って文字列置換。
  3. 選択範囲を置換できるように、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 コメント:

コメントを投稿

長崎県 引越 見積もり 単身引っ越し 料金 還暦祝い 父 Blog Entry Ranking
" ); 出会い系を例示