Float和Integer数字EditText

时间:2014-11-11 16:04:50

标签: java android android-edittext

您好我正在尝试执行只接受浮点数或整数的EditText。我这样做但不能正常工作:

myedit=(EditText)findViewById(R.id.my_edit);

myedit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);

我也是这样写的:

if(!myedit.getText().toString().matches("[a-zA-Z? ]*"){
   //do something
}
else{
 //no correct values
}

有人能帮助我吗?

4 个答案:

答案 0 :(得分:0)

您必须将输入过滤器设置为编辑文本...

            et.setFilters(new InputFilter[] {
                 new DigitsKeyListener(Boolean.FALSE, Boolean.TRUE) {
                int beforeDecimal = 5, afterDecimal = 2;

                @Override
                public CharSequence filter(CharSequence source, int start, int end,
                        Spanned dest, int dstart, int dend) {
                    String temp = et.getText() + source.toString();

                    if (temp.equals(".")) {
                        return "0.";
                    }
                    else if (temp.toString().indexOf(".") == -1) {
                        // no decimal point placed yet
                        if (temp.length() > beforeDecimal) {
                            return "";
                        }
                    } else {
                        temp = temp.substring(temp.indexOf(".") + 1);
                        if (temp.length() > afterDecimal) {
                            return "";
                        }
                    }

                    return super.filter(source, start, end, dest, dstart, dend);
                }
            }
    });

答案 1 :(得分:0)

请你试试

您的xml文件中的

android:input = "number"

这会将您的编辑文本设置为仅将数字作为输入

答案 2 :(得分:0)

最简单的方法是将digits属性设置为仅接受有效的整数和小数值:

android:digits="0123456789."

虽然你可能仍然应该在NumberFormatException的try / catch中包装转换,以防万一有一些边缘输入的情况我不知道。

答案 3 :(得分:0)

抱歉这已经很晚了,但可能会帮助其他人坚持这一点。

我发现完成此操作的最简单方法是设置android:input值,如下所示:

<EditText
      android:id="@+id/editText"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:inputType="numberDecimal|numberSigned" />
  • &#34; numberDecimal&#34; - 表示它将接受浮点数。
  • &#34; numberSigned&#34; - 意味着它会接受积极的&amp;负数。

这个^^^组合只允许用户输入整数或浮点数!

然后,如果你想解析这个值,你可能想尝试这样的事情:

String numberAsString = "22.13";
try {
    int number = Integer.parseInt(numberAsString);
} catch (NumberFormatException e) {
    try {
        float number = Float.parseFloat(numberAsString);
    } catch (NumberFormatException ex) {
        Log.e(TAG, "Not float value", e);
        Log.e(TAG, "Not integer value", ex);
    }
}