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

回到顶部