эй!я пытаюсь сделать то же самое с принудительным вводом текста в нижнем регистре;s.clear (), за которым следует s.append (), вызывает и для меня (или все еще) StackOverflow.
Интересно, почему Android помещает нас через обручи для принудительного преобразования в нижний регистр?
Так какиспользование TextWatcher для меня не удавалось (правильно ... и я не мог понять, как работать пролеты), я посмотрел на TransformationMethod.
Первая попытка состояла в том, чтобы сделать встроенный метод TransformationMethod для EditText примерно так:
et.setTransformationMethod(new TransformationMethod() {
public void onFocusChanged(View view, CharSequence sourceText, boolean focused, int direction,
Rect previouslyFocusedRect) {
}
public CharSequence getTransformation(CharSequence source, View view) {
String ret = source.toString().toLowerCase();
System.out.println(ret);
return ret;
}
});
Это вызвало сбой из-за IndexArrayOutOfBounds, как только я набрал один символ в ET.Не могу понять, почему.
Итак, я проверил код для PasswordTransformation и затем ReplacementTransformation - оба кажутся очень сложными, и я не хотел беспокоиться обо всем этом? материале?.
Затем проверил подкласс SinglelineTransformation, который был прост ... поэтому я создал LowerCaseTransformation в качестве подкласса ReplacementTransformation следующим образом:
public class LowerCaseReplacement extends ReplacementTransformationMethod {
private static final char[] ORIG = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
private static final char[] REPS = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
private static LowerCaseReplacement singleton;
@Override
protected char[] getOriginal() {
return ORIG;
}
@Override
protected char[] getReplacement() {
return REPS;
}
public static LowerCaseReplacement getInstance() {
if (singleton == null)
singleton = new LowerCaseReplacement();
return singleton;
}
}
и добавил эту xform в et ...как в et.setTransformationMethod (LowerCaseReplacement.getInstnace ()) ...
Это работает !!
Если у кого-то есть лучшее решение, пожалуйста, просветите!