【问题标题】:How to restrict the EditText input content如何限制 EditText 输入内容
【发布时间】:2012-05-31 02:04:10
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android numbers android-edittext phone-number


    【解决方案1】:

    您可以在 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
            }
        };
    

    【讨论】:

    • 您能否详细说明如何使用 TextWatcher 以达到目的?
    【解决方案2】:

    你可以使用这个digits属性android:digits="0123456789"

    【讨论】:

      【解决方案3】:

      使用TextWatcher 来检查每个输入的内容,并确定是否应该允许它进入 EditText 或忽略它。

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

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

      edt.addTextChangedListener(mTextWatcher);
      

      【讨论】: