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

我想通过按下一个button插入一个常量string到EditText中。 该string应该插入EditText中的当前位置。 如果我使用EditText.append则将文本插入到EditText的末尾。

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

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

Clu.Ohlund给了我正确的提示。 我解决了它,现在,部分使用EditText.getSelectionStart() ,但我意识到,你也可以用相同的expression式replace选定的文本,你不需要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()); 

这适用于在当前位置插入文本并replace用户select的任何文本。 Math.max()在第一行和第二行中是必需的,因为如果EditText中没有select或游标,则getSelectionStart()getSelectionEnd()将返回-1。 第三行中的Math.min()Math.max()是必需的,因为用户可能已经向后select了文本,因此开始将具有比Editable.replace()不允许的结束更高的值。

这似乎更简单:

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

但是,如果您想用插入的文本replace任何选定的文本,Manuel的答案可能会更好。

我觉得这个function对你有帮助:

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