Как разрешить только положительные числа в EditText

У меня есть TextWatcher, который включает кнопку, когда все длины EditTexts ()!= 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 будет большое спасибо.

4 ответов


вы должны использовать attr EditText:

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("");
        }

        // ...
    });

для каждого 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)
// [...]

Это немного длиннее, чем ответ ToYonos, но может помочь понять принципы. Это также упрощает ваш блок if немного.

private boolean isEditTextEmptyOrNegative(EditText editText) {
    // check if editText is empty
    if (editText.getText().toString().length() == 0)
        return true;

    // get text from editText
    String text = editText.getText().toString();

    try {
        // try to parse text to int
        int textInt = Integer.valueOf(text);

        // if int is > 0, return false (not empty or negative), else return true (int is negative)
        if (textInt > 0)
            return false;
        else
            return true;
    } catch (NumberFormatException nfe) {
        // catch NumberFormatException, text entered is not a valid int, treat it as empty (you may want to handle differently)
        return true;
    }
}

и ваш блок if будет чем-то вроде этого:

if (isEditTextEmptyOrNegative(et1local) || isEditTextEmptyOrNegative(et2local) || ... )

просто удалите знаки минус в onTextChanged.

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

      et1Local.setText(et1local.getText().toString().replace"-",""));
      .....
      et9Local.setText(et9local.getText().toString().replace("-".""));
}