我想通过按下按钮将常量字符串插入EditText。该字符串应插入EditText中的当前位置。
如果我使用EditText.append
,则会在EditText的末尾插入文本。
我该怎么做?我找不到合适的方法。
答案 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 =可编辑;