Android:在当前位置将文本插入EditText

Man*_*uel 57 android insert android-edittext

我想通过按下按钮将常量字符串插入EditText.该字符串应插入EditText中的当前位置.如果我使用EditText.append文本在EditText的末尾插入.

我怎样才能做到这一点?我找不到合适的方法.

Man*_*uel 92

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());
Run Code Online (Sandbox Code Playgroud)

这适用于两者,在当前位置插入文本并替换用户选择的任何文本.的Math.max(),因为,如果在没有的EditText选择或光标,在第一和第二行必要的getSelectionStart()getSelectionEnd()都将返回-1.的Math.min()Math.max()在第三行,因为用户可能已经向后选择的文本,从而开始将具有比这是不允许对端有较高的值是必要的Editable.replace().

  • 文档特别指出您不应修改 EditText.getText() https://developer.android.com/reference/android/widget/EditText.html#getText() 返回的对象的内容 (2认同)

Ole*_*ich 74

这似乎更简单:

yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");
Run Code Online (Sandbox Code Playgroud)

但是,如果要使用插入的文本替换任何选定的文本,Manuel的答案可能会更好.

  • 毫无疑问,这是最好的答案.应该被接受.我没有理由重新发明轮子并且它保持了`Editable`而没有用`setText()`调用覆盖它,这在大多数应用程序中都是至关重要的.对`EditText`中的其他元素最干净,最简单,最不具阻碍性 (3认同)

Cpt*_*und 20

尝试使用EditText.getSelectionStart()获取光标的当前位置.然后,您可以使用String.subString获取光标前后的文本,并将文本插入中间.


Gha*_*yas 6

对于 Kotlin只需这样做:

editText.text.insert(editText.selectionStart, "Your Text Here")
Run Code Online (Sandbox Code Playgroud)


wan*_*gyi 5

我认为此功能将为您提供帮助:

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());
}
Run Code Online (Sandbox Code Playgroud)