Как ограничить содержимое ввода EditText
Я пытаюсь создать простой калькулятор, который предоставляет пользователям EditText для ввода чисел. Разрешающий входной контент должен быть [1,2,3,4,5,6,7,8,9,0,.]
Я знаю, что можно ограничить входной контент, используя следующий код
android:digits="1234567890."
android:inputType="phone"
Но как я могу запретить пользователям добавлять более одной точки (.
) в поле ввода текста?
3 ответа
Вы можете использовать этот атрибут цифр android:digits="0123456789"
Вы можете использовать предельные символы InputFilter в EditText как:
EditText mEdit = (EditText)findViewById(R.id.mEdit);
InputFilter[] filters = {new AdnNameLengthFilter()};
mEdit.setFilters(filters);
public static class AdnNameLengthFilter implements InputFilter
{
private int nMax;
public CharSequence filter (CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
Log.w("Android_12", "source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest);
if(dest.toString()=="."||( source.toString()==".")
{
//DO SOMTHING HERE
}else
{
//DO SOMTHING HERE
}
}
}
Второй вариант - TextWatcher для поиска ввода символов пользователем как:
mEditText = (EditText)findViewById(R.id.ET);
mEditText.addTextChangedListener(mTextWatcher);
TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
// YOU STRING BEFORE CHANGE
}
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
// CHARS INPUT BY USER
}
@Override
public void afterTextChanged(Editable s) {
// AFTER TEXT CCHANGE In EDITTEXT BY USER
}
};
Используйте TextWatcher, чтобы проверить каждую вещь по мере ее ввода и определить, следует ли ее разрешить в EditText или игнорировать.
Сделайте себя единым и переопределите его методы для реализации любой логики, которую вы хотите.
как только вы создадите свой TextWatcher, примените его к EditText следующим образом:
edt.addTextChangedListener(mTextWatcher);