EditText游标定位问题
我正在使用下面的函数强制每个单词的第一个字母在Edittext中的大写字母。EditText游标定位问题
public String capitalizeFirstLetterWord(String s) { StringBuilder cap = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
try {
char x = s.charAt(i);
if (x == ' ') {
cap.append(" ");
char y = s.charAt(i + 1);
cap.append(Character.toUpperCase(y));
i++;
} else {
cap.append(x);
}
} catch (IndexOutOfBoundsException ignored) {
}
}
//finally, capitalize the first letter of the sentence
String sentence = cap.toString();
if (sentence.length() > 0) {
sentence = String.valueOf(sentence.charAt(0)).toUpperCase(); //capitalize first letter
if (cap.toString().length() > 1) { //check if there's succeeding letters
sentence += cap.toString().substring(1); //append it also
}
}
return sentence;
}
和下面称其为afterTextChange()方法:
@Override public void afterTextChanged(Editable editable) {
if (getActivity().getCurrentFocus() == mEdtName) {
if (editable.toString().length() > 0 &&
!editable.toString().equals(mOldName)) {
mOldName = editable.toString(); //prevent infinite loop
mEdtName.setText(capitalizeFirstLetterWord(editable.toString()));
mEdName.setSelection(mEdGymName.getText().length()); //set the cursor to the end of the editText
}
}
}
但是,问题是,当我试图抹去从Editext整个字符串中间的字符。游标正在文本的末尾移动。 。 这是因为在的下面一行afterTextChanged()方法。 如果我评论该行,光标移动到第一个位置。 。
什么可能是解决方案?
回答:
试试这个:
@Override public void afterTextChanged(Editable editable) {
if (getActivity().getCurrentFocus() == mEdtName) {
if (editable.toString().length() > 0 && !editable.toString().equals(mOldName)) {
int selection = mEditName.getSelectionEnd();
mOldName = editable.toString(); //prevent infinite loop
mEditName.removeTextChangedListener(this);
mEditName.setText(capitalizeFirstLetterWord(editable.toString()));
mEditName.setSelection(selection);
mEditName.addTextChangedListener(this);
}
}
}
回答:
我认为你应该使用输入过滤器来做到这一点。
以上是 EditText游标定位问题 的全部内容, 来源链接: utcz.com/qa/263273.html