如何在 EditText 中仅允许正数

2022-09-03 16:27:45

我有一个TextWatcher,当所有EditTexts length()都为!= 0时启用一个按钮。我现在想添加一个功能,以确保数字是正数。我尝试在另一个if()中放入一个新的if()来检查是否>0,但由于某种原因它不起作用。

因此,我需要的是确保所有EditText不为空并且已输入正数,然后启用该数字。

这就是我所拥有的,

    public TextWatcher localWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
    }

    // When the text is edited, I want to check if all textViews are filled
    @Override
    public void afterTextChanged(Editable s) {

        // Check if any of the TextViews are == 0, if so the button remains disabled
        if      (et1local.getText().toString().length() == 0
                || et2local.getText().toString().length() == 0
                || et3local.getText().toString().length() == 0
                || et4local.getText().toString().length() == 0
                || et5local.getText().toString().length() == 0
                || et6local.getText().toString().length() == 0
                || et7local.getText().toString().length() == 0
                || et8local.getText().toString().length() == 0
                || et9local.getText().toString().length() == 0) {

            if(et1local){




        localCalculateButton.setEnabled(false);
            }

        }

        // When all are filled enable the button
        else {
            localCalculateButton.setEnabled(true);
        }
    }
};

这工作正常,但如何检查数字是否为正数,任何帮助wpuld都非常感谢。


答案 1

您应该使用 EditText 的 attr:

android:digits="0123456789."
android:inputType="number"

http://developer.android.com/reference/android/widget/TextView.html#attr_android:digits

因此,用户将只能输入不带减号的数字。

更新:类似的东西,以防止第一个符号从0:

    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void afterTextChanged(Editable edt) {
            if (edt.length() == 1 && edt.toString().equals("0"))
                editText.setText("");
        }

        // ...
    });

答案 2

对于每个,您必须执行此操作:EditText

if (Integer.parseInt(et1local.getText().toString()) > 0)

执行一个函数以确保它是一个数字

private boolean isPositive(EditText et)
{
    try
    {
        return Integer.parseInt(et.getText().toString()) > 0;
    }
    catch (Exception e)
    {
        return false;
    }
}

像这样使用它:

if (et1local.getText().toString().length() == 0 || !isPositive(et1local)
 || et2local.getText().toString().length() == 0 || !isPositive(et2local)
// [...]

推荐