web-dev-qa-db-ja.com

Android:EditTextの現在の位置にテキストを挿入します

ボタンを押すことで、EditTextに定数文字列を挿入したい。文字列は、EditTextの現在の位置に挿入する必要があります。 EditText.appendを使用すると、テキストはEditTextの最後に挿入されます。

どうやってやるの?適切な方法が見つかりませんでした。

57
Manuel

EditText.getSelectionStart()を使用して、カーソルの現在の位置を取得してください。次に、String.subStringを使用して、カーソルの前後のテキストを取得し、中央にテキストを挿入できます。

19
Cpt.Ohlund

オーランド首相は私に正しいヒントを与えてくれました。部分的に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()

90
Manuel

これは簡単そうです:

yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");

ただし、選択したテキストを挿入したテキストで置き換える場合は、マヌエルの答えの方が良い場合があります。

72
Oleg Vaskevich

この機能はあなたに役立つと思います:

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());
}
5
wangzhengyi