我自己写的字典。 如果这个字符是字符串中最后一个字符,并且它位于任何非字母字符( 或者是字符串中的单个字符) 之后,它将大写最后一个输入字符。public class EditName extends EditText {
public EditName(Context context, AttributeSet attrs) {
super(context, attrs);
addTextChangedListener(new TextWatcher() {
String lastChanged ="";
boolean isLastSingleCharChanged = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//check if only last character was changed
isLastSingleCharChanged =
count - before == 1//was added one character
&& start + count == s.length()//last character was in changed group
&& (start == 0 || count == 1);//or total change, or last character
}
@Override
public void afterTextChanged(Editable s) {
if (!isLastSingleCharChanged) return;//only if last character changed (see 上面)
int len = s.length();
if (len == 0) return;
if (len> 1 && Character.isLetter(s.charAt(len - 2))) return;//correct letter only after none-letter
char c = s.charAt(len - 1);
if (!Character.isLetter(c)) return;
if (!Character.isLowerCase(c)) return;
String text = s.toString();
if (text.equals(lastChanged)) return;//do not do the same correction twice
lastChanged = text;
EditName.this.setText(text.substring(0, text.length() - 1)
+ Character.toUpperCase(c));
EditName.this.setSelection(text.length());//position cursor
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
});
}
}