У меня есть только одно текстовое поле для редактирования, чтобы принять адрес электронной почты или номер телефона. как изменить тип ввода на основе 1-го символа? на основе пользовательского ввода мне нужно выполнять разные операции. Главное, я должен определить, является ли это адресом электронной почты или номером телефона. как это сделать?
как принять адрес электронной почты или номер телефона в одном тексте редактирования
Ответы (2)
В вашем EditText
установите TextWatcher
, который вызывает функцию, чтобы проверить, является ли текст электронной почтой или номером телефона.
Получите текст из вашего TextView, например:
String text = textView.getText().toString();
Добавление слушателя в ваш TextView :
textView.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(....){}
@Override
public void beforeTextChanged(...){}
@Override
public void afterTextChanged(Editable s) {
if(isEmail(text)){//do your stuff}
if(isPhone(text)){//do your stuff}
}
}
Ваши методы будут выглядеть примерно так:
public static boolean isEmail(String text) {
String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
Pattern p = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
return m.matches();
}
public static boolean isPhone(String text) {
if(!TextUtils.isEmpty(text)){
return TextUtils.isDigitsOnly(text);
} else{
return false;
}
}
Это может быть невозможно, просто проверив первую цифру. Хотя вы можете поместить проверки внутри метода onTextChanged
.
Ответ Ново Лукаса правильный.
Мои взгляды:
Во-первых, вы не можете узнать тип ввода, используя первую букву, потому что некоторые адреса электронной почты начинаются с цифр.
При нажатии кнопки вы можете определить тип, зная, содержит ли текст только цифры или буквенно-цифровые символы. Для получения дополнительной информации о коде вы можете найти его в Google. Я постараюсь добавить код через некоторое время. Удачи