Android: Как установить допустимые числа и символы в EditText?
Мне нужно установить допустимые символы "0123456789" и "точка с запятой" в EditText. Ниже приведен код, который я использую.
android:digits="0123456789;"
android:inputType="number|text
Проблема с этой реализацией находится в телефонах HTC, точка с запятой не может быть введена, но в Samsung и Sony Ericsson можно ввести точку с запятой. Другая проблема заключается в том, что когда я вступил в точку с запятой в Samsung и Sony Ericsson, точка с запятой не может быть удалена. Есть ли недостающее свойство в приведенном выше коде? Спасибо заранее.
Ответы
Ответ 1
Android предоставляет простой способ редактировать текстовые поля, изменяя макет xml и добавляя android: inputType = "text". Это позволяет легко создавать некоторые основные проверки, такие как числа, десятичные числа, телефон или электронные письма. Но нет никакого параметра для буквенно-цифровых (то есть никаких специальных символов). Для этого вам необходимо использовать входной фильтр, как показано ниже, и задать поля, которые вы хотите проверить с помощью этого фильтра в коде. Этот входной фильтр
InputFilter alphaNumericFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence arg0, int arg1, int arg2, Spanned arg3, int arg4, int arg5)
{
for (int k = arg1; k < arg2; k++) {
if (!Character.isLetterOrDigit(arg0.charAt(k))) {
return "";
} //the first editor deleted this bracket when it is definitely necessary...
}
return null;
}
};
mFirstName.setFilters(new InputFilter[]{ alphaNumericFilter});
Ответ 2
Чтобы ограничить то, что пользователь может вводить по типу, используйте TextWatcher, обсуждаемый в этом вопросе Android: как я могу проверить ввод EditText?.
Еще лучше: Разрешить только выбранные charcters на основе regex в EditText
Ответ 3
Решение состоит в том, чтобы изменить эти поля: http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputMethod
Установите InputMethod из EditText, чтобы вы могли правильно получить то, что вам нужно.
Ответ 4
Вот регулярное выражение
Pattern mPattern = Pattern.compile("^([1-9][0-9]{0,2})?(\\.[0-9]?)?$");
Matcher matcher = mPattern.matcher(loginNameString.toString());
if(!matcher.find())
{
//TODO
}