【发布时间】:2011-04-06 06:26:35
【问题描述】:
我想通过按下按钮将常量字符串插入到 EditText 中。该字符串应插入到 EditText 中的当前位置。
如果我使用EditText.append,文本将插入到 EditText 的末尾。
我该怎么做?我找不到合适的方法。
【问题讨论】:
标签: android insert android-edittext
我想通过按下按钮将常量字符串插入到 EditText 中。该字符串应插入到 EditText 中的当前位置。
如果我使用EditText.append,文本将插入到 EditText 的末尾。
我该怎么做?我找不到合适的方法。
【问题讨论】:
标签: android insert android-edittext
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 将具有比 end 更高的值,这对于 Editable.replace() 是不允许的。
【讨论】:
这似乎更简单:
yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");
但是,如果您想用插入的文本替换任何选定的文本,Manuel 的答案可能会更好。
【讨论】:
Editable 而不用setText() 调用覆盖它,这在大多数应用程序中都是至关重要的。 EditText中的其他元素最干净、最简单且对其他元素的阻碍最小
尝试使用EditText.getSelectionStart() 获取光标的当前位置。然后您可以使用 String.subString 获取光标前后的文本并将您的文本插入到中间。
【讨论】:
我认为这个功能会对你有所帮助:
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());
}
【讨论】:
Editable editable = new SpannableStringBuilder("在这里传递一个字符串");
yourEditText.text = 可编辑;
【讨论】:
对于 Kotlin 只需这样做:
editText.text.insert(editText.selectionStart, "Your Text Here")
【讨论】: