Мне нужно сделать EditText
, который бы принимал только один символ и только символ (буква / альфа). И если пользователь вводит другой символ, он должен заменить существующий (например, метод перезаписи ввода текста на 1 разрешенный символ).
Я знаю, как установить максимальную длину текста в свойствах. Но если я установлю это
до 1, то никакой другой символ не может быть вставлен до того, как пользователь удалит
существующий Но я хочу заменить существующий символ новым
один автоматически без удаления вручную. Как это сделать?
Я знаю, как установить свойство, чтобы разрешить только цифры в EditText
, но я
не могу понять, как разрешить только символы. Итак, второй вопрос - как разрешить только символы в EditText
?
В настоящее время я использую EditText
с максимальным размером текста = 2 со следующим кодом:
final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter);
editLetter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (s!=null && s.length()>1){
editLetter.setText(s.subSequence(1, s.length()));
editLetter.setSelection(1);
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
Дело в том, что когда пользователь вводит второй символ, первый должен быть удален. Если размер текста будет равен 2, пользователь сможет ввести другой символ после того, как он уже введен.
Я не очень понимаю, как это работает, но работает :). И, кроме того, мне пришлось навести курсор в EditText
на последнюю позицию, потому что он всегда идет к началу, что делает невозможным вообще вводить что-либо. Не понимаю, почему это так.
Суть этого решения в том, что оно имеет размер EditText
с двумя символами, но я хочу, чтобы он был размером с 1 символ. И это позволяет вводить что угодно, кроме букв (chars / alpha), и я ничего не хочу, кроме символов.
Используя советы sgarman и Character.isLetter()
, метод afterTextChanged
выглядит следующим образом:
public void afterTextChanged(Editable s) {
int iLen=s.length();
if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){
s.delete(iLen-1, iLen);
return;
}
if (iLen>1){
s.delete(0, 1);
}
}
Я обнаружил, что использование Selection.setSelection
не требуется в этом случае. Теперь он имеет фильтр, позволяющий вводить только буквы. Это почти ответ, который я хочу. Осталось только одно - как сделать то же самое с размером символа 10 EditText
?
.