ボタンを押すことで、EditTextに定数文字列を挿入したい。文字列は、EditTextの現在の位置に挿入する必要があります。 EditText.append
を使用すると、テキストはEditTextの最後に挿入されます。
どうやってやるの?適切な方法が見つかりませんでした。
EditText.getSelectionStart()
を使用して、カーソルの現在の位置を取得してください。次に、String.subStringを使用して、カーソルの前後のテキストを取得し、中央にテキストを挿入できます。
オーランド首相は私に正しいヒントを与えてくれました。部分的にEditText.getSelectionStart()
を使用して解決しましたが、選択したテキストを同じ式に置き換えることもでき、そのためにString.subString()
は必要ないことに気付きました。
_int start = Math.max(myEditText.getSelectionStart(), 0);
int end = Math.max(myEditText.getSelectionEnd(), 0);
myEditText.getText().replace(Math.min(start, end), Math.max(start, end),
textToInsert, 0, textToInsert.length());
_
これは、現在の位置にテキストを挿入し、ユーザーが選択したテキストを置換する両方で機能します。 EditTextに選択またはカーソルがない場合、Math.max()
とgetSelectionStart()
は両方とも-1を返すため、1行目と2行目にgetSelectionEnd()
が必要です。 3行目のMath.min()
およびMath.max()
は、ユーザーがテキストを逆方向に選択した可能性があり、したがってstartはEditable.replace()
。
これは簡単そうです:
yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");
ただし、選択したテキストを挿入したテキストで置き換える場合は、マヌエルの答えの方が良い場合があります。
この機能はあなたに役立つと思います:
public void insertConstantStr(String insertStr) {
String oriContent = editText.getText().toString();
int index = editText.getSelectionStart() >= 0 ? editText.getSelectionStart() : 0;
StringBuilder sBuilder = new StringBuilder(oriContent);
sBuilder.insert(index, insertStr);
editText.setText(sBuilder.toString());
editText.setSelection(index + insertStr.length());
}