如何防止android中编辑文本中数字的强大功能

时间:2014-01-02 10:06:12

标签: android android-edittext

我正在创建一个带有一个文本字段的应用程序,但是当我输入一个带电源的数字时,它会显示错误。我需要阻止在EditText中输入数字的力量。我怎样才能做到这一点?

编辑:我还需要英文字母,而不仅仅是数字。我只想阻止一个数字的力量。因此android:inputType="number"android:inputType="numberDecimal"对我不起作用。

2 个答案:

答案 0 :(得分:2)

我能想到的三种方式(选择一种,或者它们的组合):

  1. 将此属性添加到XML布局中的EditText:android:inputType="number"
  2. 在您的活动类中以编程方式设置输入文本:

    EditText et = (EditText)findViewById(R.id.editText);
    et.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
    

    如果您想让用户输入小数点,您也可以在其中添加句点。您甚至可以添加所有字母。

  3. 设置文本更改的侦听器,如下所示:

    final EditText et = (EditText)findViewById(R.id.editText);
    et.addTextChangedListener(new TextWatcher() {
    
        @Override
        public void afterTextChanged(Editable s) 
        { 
            String text = et.getText().toString();
    
            if (text.length() > 0) { // if EditText is not empty
                // if last entered character was "^"
                if (text.substring(text.length() - 1).equals("^"))
                {
                    // last entered text was a caret so take it out
                    et.setText(text.substring(0, text.length() - 1));
                    et.setSelection(et.length()); // set the cursor to the end
                }
            }   
        }
    
        @Override
        public void onTextChanged(CharSequence s, int st, int b, int c) 
        { }
    
        @Override
        public void beforeTextChanged(CharSequence s, int st, int c, int a) 
        { }
    
    });
    

    注意:if (text.substring(text.length() - 1).equals("^"))是可选的。您可以将"^"更改为您不想在EditText中输入的任何字符。

答案 1 :(得分:1)

我不知道为什么人们会在这里投票,这是一个有效的问题。

首先,您应该确保输入4E-13之类的输入不是一个合理的用例。对科学定位的应用程序有意义。如果是这种情况,请更改输入解析逻辑。

如果不是这种情况,请使用TextWatcher来阻止用户输入文字。