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

Android:在当前位置将文本插入EditText,android,insert,android-edittext,Android,Insert,Android Edittext,我想通过按下按钮将常量字符串插入到EditText中。字符串应插入到EditText中的当前位置。 如果我使用EditText.append,文本将插入到EditText的末尾 我该怎么做?我找不到合适的方法。尝试使用EditText.getSelectionStart()获取光标的当前位置。然后你可以使用Strug.Script来获取游标前后的文本,并将文本插入中间。p> Cpt.Ohlund给了我正确的提示。我现在解决了这个问题,部分原因是使用了EditText.getSelectionSt

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


我该怎么做?我找不到合适的方法。

尝试使用
EditText.getSelectionStart()
获取光标的当前位置。然后你可以使用Strug.Script来获取游标前后的文本,并将文本插入中间。p> 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());
这两种方法都适用,即在当前位置插入文本和替换用户选择的任何文本。
Math.max()
在第一行和第二行是必需的,因为如果编辑文本中没有选择或光标,
getSelectionStart()
getSelectionEnd()
都将返回-1。第三行中的
Math.min()
Math.max()
是必需的,因为用户可以向后选择文本,因此start的值比end的值高,这是
可编辑的。replace()

这似乎更简单:

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

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

我认为此功能将有助于您:

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

可编辑=新的SpannableStringBuilder(“在此处传递字符串”)


yourEditText.text=可编辑

这无疑是最好的答案。它应该被接受。我认为没有理由重新发明轮子,它保持
可编辑
,而不使用
setText()
调用覆盖它,这在大多数应用程序中是至关重要的。最干净、最简单且对
EditText
中其他元素的阻碍最小这比使用子字符串快吗?如果已经选择了一系列文本,那么,仅仅在选择的开头插入可能不是用户所期望的。文档明确指出,您不应该修改EditText返回的对象的内容。getText()令人惊讶的是,尝试了所有其他解决方案,但Xamarin Android都不适用。在Java中,Replace函数的参数比Xamarin中的多。这太完美了!文档明确指出,不应修改EditText.getText()返回的对象的内容