少し前まで、Androidアプリケーションに入力フィールド(EditText)のバリデーターを追加する必要がありましたが、ネットワーク上で適切なものは何もありませんでした。自分で作成する必要がありました。 すべてが準備できたので、Apacheライセンスの下で全員に結果を配布し、すべてがどのように機能するかについて少し話すことができます。 興味がある人 猫の下でお願いします。
すべてがゼロから書かれたため、自分でアーキテクチャを作成することが可能であったため、次のスキームが選択されました。
- 1つのバリデーターが1つの入力フィールドに割り当てられます(さらに可能性がありますが、これは意味がありません)
- 各チェッカーには、さまざまな条件(テキストの長さ、マスクの一致など)に応じて、いくつかのチェッカーが割り当てられます。
- チェッカーは、追加された順序でチェックを実行し、最初の「失敗」はメッセージを表示します。
便宜上、いくつかのカスタマイズを行いました。
- フィールドのテキストを変更するか、手動で両方をチェックすることを選択できます
- 別のTextViewとAndroidメカニズム(ポップアップメッセージの付いた赤いアイコン)の両方でメッセージを表示できます。
- バリデーターをグループに結合してグループ全体のチェックを開始し、グループ内の少なくとも1つのバリデーターがエラーを検出した場合は別のメッセージを表示することもできます。
バリデータとチェッカーには基本的な抽象クラスがあり、これを実装することにより、コントロールと特別なチェック用のバリデータを取得できます。
チェックがあります:
- ボイドラインへ
- 行の長さ
- コンプライアンス正規表現用
- 範囲ごと(整数値の入力フィールド用)
- 別の入力フィールドのテキストを一致させるには(パスワードの確認に役立ちます)
コードでは、すべて次のようになります。
// ValidationSummary summaryValidator_ = new ValidationSummary(getString(R.string.common_error_message), headerErrorMessage); // EditTextValidator firstnameValidator = new EditTextValidator(); // EditText , ( , ) firstnameValidator.setViewToValidate(firstnameEdit, ValidationMode.Manual); // TextView , firstnameValidator.setExternalErrorView( (TextView) findViewById(R.id.firstname_error_text)); // firstnameValidator.addConditionChecker(new NotEmptyChecker( getString(R.string.name_required_error_message) )); // firstnameValidator.addConditionChecker(new LengthChecker(1, 50, getString(R.string.firstname_error_message) )); // summaryValidator_.addValidator(firstnameValidator); ... // EditTextValidator confirmPasswordValidator = new EditTextValidator(); confirmPasswordValidator.setViewToValidate(confirmPasswordEdit, ValidationMode.Manual); confirmPasswordValidator.setExternalErrorView( (TextView) findViewById(R.id.confirm_password_error_text)); // , - passwordEdit confirmPasswordValidator.addConditionChecker(new TextMatchChecker(getString(R.string.confirm_password_error_message), passwordEdit)); summaryValidator_.addValidator(confirmPasswordValidator);
以下を呼び出すことにより、グループ内のすべてのバリデーターのチェックを開始できます。
summaryValidator_.performCheck();
バリデーターに興味がある人は、このコードが書かれた壁の中で、 Rus WizardsのGitHubからプロジェクトを取得することを勧めます。
そして、もちろん、提案、提案、ヒントは大歓迎です!