3

Androidでフォーム検証ライブラリを見つけようとしています。そんなことありますか?

フィールドを検証したい登録フォームがあります。ユーザーが無効なデータを入力した場合、フィールドの右側に赤い警告マークを付けて、無効なデータを入力したことを示すツールチップをポップアップ表示したいと考えています。

については知っていますandroid:inputTypeが、これは私が望んでいるものではありません

4

5 に答える 5

2

私はそのようなライブラリについて知りません。ただし、EditTexts を使用している場合は、カスタムTextWatcherを使用するのが最善の方法です。

class TextCheck implements TextWatcher
{
    private EditText editor;

    public TextCheck(EditText editor)
    {
        this.editor = editor;
    }

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
    {
        // check the text, and if the user entered 
        // something wrong, change your edittext
        if(something wrong)
        {
            editor.setBackgroundColor(Color.RED); //for example
        }
    }

    @Override
    public void afterTextChanged(Editable arg0){}

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3){}


}

そして、次のようなすべての EditTexts で使用できます

EditText editor = (EditText) findViewById(...your id...);
editor.addTextChangedListener(new TextCheck(editor));
于 2012-08-08T09:26:34.800 に答える
2

そのようなことはありますか?

ああ..はい、1 つあり、ここで見つけることができます。

Annotationsを使用してフォーム検証を行いますが、これに限定されません。ライブラリの機能を確認するには、ライブラリの使用法について説明した SO に関する次の回答を参照してください。

新しいルールを書きたい場合は、いつでもRuleクラスを拡張できます。

PS: 私はライブラリの作成者です。

于 2012-10-29T05:59:12.477 に答える
1

これが古いことは承知していますが、この優れたAndroid Validation ライブラリを試して、このStackoverflow リファレンスとこのStackoverflow リファレンスにアクセスして使用例を確認してください。主なライブラリのハウツーがわかりにくいことがわかったからです。

于 2015-02-18T10:04:50.777 に答える
0

私は似たようなことをしました。このコードを改善し、必要に応じて適応させることができます。

EditTextWithValidation.java

public class EditTextWithValidation extends EditText implements OnTouchListener {
    private EditTextValidator mValidator;

    public EditTextWithValidation(Context context) {
        super(context);

        initialize();
    }

    public EditTextWithValidation(Context context, AttributeSet attrs) {
        super(context, attrs);

        initialize();
    }

    public EditTextWithValidation(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        initialize();
    }

    public EditTextValidator getCustomValidator() {
        return mValidator;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        setError(null);

        return false;
    }

    private void initialize() {
        mValidator = new EditTextValidator(this);
        setOnTouchListener(this);
    }
}

EditTextValidator.java

public class EditTextValidator {
    private static final String TAG = EditTextValidator.class.getName();

    private enum ValidationResult {
        Ok, Rules, Mismatch
    }

    private EditText mParent;
    private Pattern mValidationPattern;
    private int mValidationErrorMsgId;
    private boolean mAllowEmpty;
    private EditText mMatchView;
    private int mMismatchMsgId;
    private int mMinLength;
    private int mMaxLength;
    private ValidationResult mValidationResult;

    public EditTextValidator(EditText parent) {
        this.mParent = parent;
    }

    public void setAllowEmpty(boolean allowEmpty) {
        this.mAllowEmpty = allowEmpty;
    }

    public void setValidationErrorMsgId(int validationErrorMsgId) {
        this.mValidationErrorMsgId = validationErrorMsgId;
    }

    public void setValidationRules(String strPattern, int validationErrorMsgId, boolean allowEmpty) {
        try {
            if (!TextUtils.isEmpty(strPattern)) {
                mValidationPattern = Pattern.compile(strPattern);
            }
        } catch (PatternSyntaxException e) {
            Log.e(TAG, e.getMessage(), e);
            ToastUtil.toastShort("Invalid validation pattern!");
        }

        this.mValidationErrorMsgId = validationErrorMsgId;
        this.mAllowEmpty = allowEmpty;
    }

    public void setValidLength(int min, int max) {
        mMinLength = min;
        mMaxLength = max;
    }

    public void shouldMatch(EditText matchView, int mismatchMsgId) {
        this.mMatchView = matchView;
        this.mMismatchMsgId = mismatchMsgId;
    }

    public boolean validate() {
        mValidationResult = ValidationResult.Ok;

        InputMethodManager imm = (InputMethodManager) mParent.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mParent.getWindowToken(), 0);

        final String text = mParent.getText().toString();
        final int length = text.length();

        if (mValidationResult == ValidationResult.Ok && !mAllowEmpty && 0 == text.length()) {
            mValidationResult = ValidationResult.Rules;
        }

        if (mValidationResult == ValidationResult.Ok) {
            if (mMinLength != 0 && length < mMinLength) {
                mValidationResult = ValidationResult.Rules;
            } else if (mMaxLength != 0 && length > mMaxLength) {
                mValidationResult = ValidationResult.Rules;
            }
        }

        if (mValidationResult == ValidationResult.Ok && mValidationPattern != null) {
            Matcher m = mValidationPattern.matcher(text);
            if (!m.matches())
                mValidationResult = ValidationResult.Rules;
        }

        if (mValidationResult == ValidationResult.Ok && mMatchView != null) {
            if (mMatchView.getText().toString().compareTo(text) != 0)
                mValidationResult = ValidationResult.Mismatch;
        }

        if (ValidationResult.Ok == mValidationResult) {
            mParent.setError(null);
        } else {
            CharSequence error = null;
            if (ValidationResult.Rules == mValidationResult)
                error = MyApplication.getContext().getText(mValidationErrorMsgId);
            else if (ValidationResult.Mismatch == mValidationResult)
                error = MyApplication.getContext().getText(mMismatchMsgId);

            mParent.setError(error);
            mParent.requestFocus();
        }

        return mValidationResult == ValidationResult.Ok;
    }
}

使用法:

mSignupEmail = (EditTextWithValidation) root.findViewById(R.id.signup_email);
mSignupEmail.getCustomValidator().setValidationRules(
        "[a-zA-Z0-9_-]+(?:\\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9_-]+)*\\.(?:[a-zA-Z]{2,})",
        R.string.email_answer_validation_msg,
        false);
mSignupEmail.getCustomValidator().setValidLength(0, 50);

…

mSignupPassword = (EditTextWithValidation) root.findViewById(R.id.signup_password);
mSignupPassword.getCustomValidator().setValidationRules(
                    "[a-zA-Z0-9!@#$%^&*()]{6,20}",
        R.string.password_validation_msg,
        false);

…

mSignupConfirmPassword = (EditTextWithValidation) root.findViewById(R.id.signup_confirm_password);
mSignupConfirmPassword.getCustomValidator().setAllowEmpty(true);
mSignupConfirmPassword.getCustomValidator().shouldMatch(mSignupPassword, R.string.password_mismatch);
mSignupConfirmPassword.getCustomValidator().setValidationErrorMsgId(R.string.password_validation_msg);

…

if (mSignupEmail.getCustomValidator().validate() && mSignupPassword.getCustomValidator().validate() && mSignupConfirmPassword.getCustomValidator().validate()) {
    // DO SOMETHING
}
于 2012-08-08T09:32:57.527 に答える
0

このアプリをインストールします: https://play.google.com/store/apps/details?id=com.desarrollodroide.repos

移動: Utils-> Android-Validator->View Demo

このアプリには他にもたくさんのクールなライブラリがあります。良い点は、各ライブラリのデモを表示し、必要に応じてその特定のライブラリの github リポジトリへのリンクを取得できることです。とても便利です。

于 2013-08-21T14:26:28.867 に答える