4

我正在尝试创建一个简单的计算器,它为用户提供 EditText 以输入数字。允许的输入内容应该是[1,2,3,4,5,6,7,8,9,0,.]

我知道可以通过使用以下代码来限制输入内容

android:digits="1234567890."
android:inputType="phone"

.但是如何防止用户在 EditText 框中添加多个点 ( )?

4

3 回答 3

3

您可以 在 EditText 中使用InputFilter限制字符:

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
        }
    };
于 2012-05-31T02:40:51.263 回答
1

使用TextWatcher在输入时检查每个内容,并确定是否应允许将其输入 EditText 或忽略它。

让自己成为一个并覆盖它的方法来实现你想要的任何逻辑。

创建 TextWatcher 后,将其应用于 EditText,如下所示:

edt.addTextChangedListener(mTextWatcher);
于 2012-05-31T02:07:44.507 回答
1

您可以使用此数字属性android:digits="0123456789"

于 2012-05-31T02:37:26.570 回答