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