Как ограничить содержимое ввода 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);
Другие вопросы по тегам