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

时间:2010-08-31 12:49:33

标签: android insert android-edittext

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

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

5 个答案:

答案 0 :(得分:90)

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(),因为如果EditText中没有选择或游标,getSelectionStart()getSelectionEnd()都将返回-1。第三行中的Math.min()Math.max()是必需的,因为用户可能已向后选择文本,因此start将具有比Editable.replace()不允许的结束更高的值。

答案 1 :(得分:71)

这似乎更简单:

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

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

答案 2 :(得分:19)

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

答案 3 :(得分:4)

我认为此功能对您有所帮助:

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

答案 4 :(得分:0)

Editable editable = new SpannableStringBuilder(“在此处传递字符串”);

yourEditText.text =可编辑;