安卓:将文本插入的EditText在当前位置
-
25-09-2019 - |
题
我想通过按钮的按压插入一个恒定字符串转换成一个EditText。该字符串应该在的EditText当前位置插入。
如果我使用EditText.append
文本被插入到的EditText的末尾。
我怎样才能做到这一点?我无法找到一个合适的方法。
解决方案
尝试使用EditText.getSelectionStart()
获得光标的当前位置。然后你可以使用String.subString之前光标开始和在中间插入你的文字来获取文本。
其他提示
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()
和Editable.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());
}
不隶属于 StackOverflow