Мне нужно создать 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
на последнюю позицию, потому что он всегда переходит в начало, что делает невозможным ввод вообще ничего. Не понимаю, почему так.
Основная суть этого решения состоит в том, что оно имеет размер 2 символа EditText
, но я хочу, чтобы он был размером 1 символ. И это позволяет вводить что угодно, кроме букв (символы / альфа), и мне нужны только символы.
Воспользовавшись советом, предоставленным функцией 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
в этом случае не требуется. Теперь в нем есть фильтр, позволяющий вводить только буквы. Это почти тот ответ, который я хочу. Осталось только одно: как сделать то же самое с размером в 1 символ EditText
?