아래의 기능을 사용하여 각 단어의 첫 글자를 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() 메소드에서 아래 줄이 있기 때문입니다. 그 행에 주석을 달면 커서가 첫 번째 위치로 이동합니다. .
해결 방법은 무엇입니까?
방금 추가 한 mEditName.addTextChangedListener (this); ??? 출력 변경 없음 : –
@JaiminModi 아니오, 여섯 번째 줄을보십시오 mEditName.removeTextChangedListener (this); –
그러나 여전히 작동하지 않습니다. 복사했습니다. –