Android Saripaar 注解详解
写这篇文章的原因
在移动端一般很少使用复杂的表单,一般针对于属性的更改都会打开一个新的页面进行更改。虽然不多,但是也会有。如果一个页面要输入的内容包括姓名、地址、邮箱、手机号等,对各个属性的验证会非常麻烦,并且非常的不优雅。
于是,saripaar就出现了,一种基于规则的Android UI输入验证库,通过注解即可标注验证规则。
使用过程中发现只有四个字:简单好用。但是官方对注解的使用并没有一份完整的文档,故参考源码整理了现有的所有注解(基于版本2.0.3)。
如何使用
导入依赖
第一步当然是导入依赖啦,可通过implementation 'com.mobsandgeeks:android-saripaar:(latest version)'导入saripaar,将(latest version)替换为最新版本即可。
使用注解
对需要进行验证的可输入View加上注解来标注验证规则,例
@Length(min = 6, max = 9)
private AppCompatEditText et1;
该注解表示et1中的输入内容长度只能在6到9的闭区间。
实例化Validator
mValidator = new Validator(this);
mValidator.setValidationListener(this);
Validator负责验证给定容器中的View,通常容器为Activity或Fragment。但也可以用包含View的其他类作为容器。
实现ValidationListener
public class MainActivity extends AppCompatActivity implements Validator.ValidationListener {
// Code…
@Override
public void onValidationSucceeded() {
Toast.makeText(this, "成功了!", Toast.LENGTH_LONG).show();
}
@Override
public void onValidationFailed(List<ValidationError> errors) {
Toast.makeText(this, "失败了!", Toast.LENGTH_LONG).show();
}
}
ValidationListener用户监听回调结果,并进行相应的处理。
调用验证方法
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mValidator.validate();
}
});
其余的高级用法在此不做介绍,该文章主要介绍各个注解的使用。
注解
@AssertFalse
描述
用于判断输入内容是否为false。
作用范围
CheckBoxRadioButtonRadioGroup
参数
sequence:确定规则的判定顺序,当单个View有多个规则时生效messageResId:错误提示文字的资源文件IDmessage:错误提示文字
注:所有注解均有这三个参数,故之后注解省略不写
@AssertTrue
描述
用于判断输入内容是否为true。
作用范围
CheckBoxRadioButtonRadioGroup
@Checked
描述
用于判断输入内容是否为预设值,默认预设值为true。
作用范围
CheckBoxRadioButtonRadioGroup
参数
value:用于设置预设值,默认为true
@ConfirmEmail
描述
判断当前输入内容与被@Email注解的View的内容是否一致。
注:当前容器所持有的被@Email注解的View必须且只允许有一个。
作用范围
TextView
@ConfirmPassword
描述
判断当前输入内容与被@Password注解的View的内容是否一致。
注:当前容器所持有的被@Password注解的View必须且只允许有一个。
作用范围
TextView
@CreditCard
描述
判断输入内容是否符合信用卡卡号规则。
作用范围
TextView
参数
cardTypes:是一个数组,用于确定信用卡的类型,每种类型对应着不同的正则表达式Type.AMEX,美国运通卡,对应着^(3[47]\d{13})$Type.DINERS,大莱信用卡,对应着^(30[0-5]\d{11}|3095\d{10}|36\d{12}|3[8-9]\d{12})$Type.DISCOVER,发现卡,对应着^(6011\d{12})$、^(64[4-9]\d{13})$和^(65\d{14})$Type.MASTERCARD,万事达卡,对应着^(5[1-5]\d{14})$Type.VISA,签证卡,对应着^(4)(\d{12}|\d{15})$Type.NONE,不允许任何内置的信用卡,适用于自定义信用卡类型
@DecimalMax
描述
限制输入内容的最大值,输入内容会被强转为Double类型,若输入文字不符合Double类型,会报ConversionException异常。
作用范围
TextView
参数
value:double类型,最大值。
@DecimalMin
描述
限制输入内容的最小值,输入内容会被强转为Double类型,若输入文字不符合Double类型,会报ConversionException异常。
作用范围
TextView
参数
value:double类型,最小值。
@Digits
描述
判断输入内容是否为数字,可定义整数部分以及小数部分的最大位数。
作用范围
TextView
参数
integer:整数部分最大位数fraction:小数部分最大位数
注:输入内容需满足正则
String.format("(\\d{0,%d})(\\.\\d{1,%d})?", integer, fraction);
@Domain
描述
判断输入内容是否是一个有效的域名。
作用范围
TextView
参数
allowLocal:本地地址是否有效,默认为false
@Email
描述
判断输入内容是否是一个有效的邮箱地址。
作用范围
TextView
参数
allowLocal:本地地址是否有效,默认为false
@Future
描述
判断输入的时间是否是未来时间(与当前时间相比)。输入的时间必须满足相应的格式。
作用范围
TextView
参数
dateFormat:时间的格式,默认为dd-MM-yyyy,以下为saripaar提供的格式(可自定义)DateFormats.DMY:dd-MM-yyyyDateFormats.YMD:yyyy-MM-ddDateFormats.MDY:MM-dd-yyyyDateFormats.DMY_TIME_12_HOURS:dd-MM-yyyy hh:mm aaDateFormats.YMD_TIME_12_HOURS:yyyy-MM-dd hh:mm aaDateFormats.MDY_TIME_12_HOURS:MM-dd-yyyy hh:mm aaDateFormats.DMY_TIME_24_HOURS:dd-MM-yyyy kk:mmDateFormats.YMD_TIME_24_HOURS:yyyy-MM-dd kk:mmDateFormats.MDY_TIME_24_HOURS:MM-dd-yyyy kk:mm
dateFormatResId:时间格式的资源ID
@IpAddress
描述
判断输入的内容是否是一个IP,IPv4或IPv6
作用范围
TextView
@Isbn
描述
判断输入的内容是否是一个Isbn,即国际标准书号。
作用范围
TextView
@Length
描述
限制输入内容的文本长度,可自定义最大长度和最小长度。
作用范围
TextView
参数
min:文本的最小长度,默认为Integer.MIN_VALUEmax:文本的最大长度,默认为Integer.MAX_VALUEtrim:是否需要先做trim操作,默认为false
@Max
描述
限制输入内容的最大值,输入内容会被强转为Integer类型,若输入文字不符合Integer类型,会报ConversionException异常。
作用范围
TextView
参数
value:int类型,最大值。
@Min
描述
限制输入内容的最小值,输入内容会被强转为Integer类型,若输入文字不符合Integer类型,会报ConversionException异常。
作用范围
TextView
参数
value:int类型,最小值。
@NotEmpty
描述
判断输入内容是否非空。
作用范围
TextView
参数
trim:判断之前是否要先trim,默认为falseemptyText:设置“空字符串”,可自定义一段文本,当输入此文本是则为空emptyTextResId:设置“空字符串”的资源文件
@Order
描述
确定校验字段的顺序。当一个容器有多个View需要检验时,可通过该注解确定校验顺序。
作用范围
TextViewCheckBoxRadioButtonRadioGroupSpinner
参数
value:int类型,用于确定顺序
@Password
描述
用于校验文本是否符合密码的规则。
作用范围
TextView
参数
min:最小字符数,默认为6scheme:Scheme类型,利用正则确定密码的输入格式,只能为Scheme类型,不可自定义,默认为Password.Scheme.ANYPassword.Scheme.ANY:.+Password.Scheme.ALPHA:\w+Password.Scheme.ALPHA_MIXED_CASE:(?=.*[a-z])(?=.*[A-Z]).+Password.Scheme.NUMERIC:\d+Password.Scheme.ALPHA_NUMERIC:(?=.*[a-zA-Z])(?=.*[\d]).+Password.Scheme.ALPHA_NUMERIC_MIXED_CASE:(?=.*[a-z])(?=.*[A-Z])(?=.*[\d]).+Password.Scheme.ALPHA_NUMERIC_SYMBOLS:(?=.*[a-zA-Z])(?=.*[\d])(?=.*([^\w])).+Password.Scheme.ALPHA_NUMERIC_MIXED_CASE_SYMBOLS:(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*([^\w])).+
@Past
描述
判断输入的时间是否是过去时间(与当前时间相比)。输入的时间必须满足相应的格式。
作用范围
TextView
参数
dateFormat:时间的格式,默认为dd-MM-yyyy,以下为saripaar提供的格式(可自定义)DateFormats.DMY:dd-MM-yyyyDateFormats.YMD:yyyy-MM-ddDateFormats.MDY:MM-dd-yyyyDateFormats.DMY_TIME_12_HOURS:dd-MM-yyyy hh:mm aaDateFormats.YMD_TIME_12_HOURS:yyyy-MM-dd hh:mm aaDateFormats.MDY_TIME_12_HOURS:MM-dd-yyyy hh:mm aaDateFormats.DMY_TIME_24_HOURS:dd-MM-yyyy kk:mmDateFormats.YMD_TIME_24_HOURS:yyyy-MM-dd kk:mmDateFormats.MDY_TIME_24_HOURS:MM-dd-yyyy kk:mm
dateFormatResId:时间格式的资源ID
@Pattern
描述
判断输入的内容是否满足正则表达式。
作用范围
TextView
参数
regex:正则表达式caseSensitive:是否区分大小写
@Select
描述
判断选择的索引是否等于默认值,如果不等于则通过,默认值为0。
作用范围
Spinner
参数
defaultSelection:设置默认值
@Url
描述
判断输入的内容是否是一个url。
作用范围
TextView
参数
schemes:是一个数组,url的协议数组,可自定义,默认为{"http", "https", "ftp"}allowFragments:url片段是否允许通过,默认为true
对于@Optional和@Or
虽然该版本已经有了这两个注解,但是并不能使用,参考作者在stackoverflow上的回复,注解将会在2.1.0版本上线

总结
本篇文章简单介绍了Android Saripaar的用法,并着重列举了各个注解的作用以及各个参数的意思,方便以后的查询。
通过阅读源码对saripaar有了更深的认识,并对基于注解的框架有了一个完备的认知。
以后如果有时间的话总结一下Android Saripaar实现的细节。
Android Saripaar 注解详解的更多相关文章
- android:ToolBar详解
android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ...
- Android之canvas详解
首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...
- 【转】Android Canvas绘图详解(图文)
转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...
- Android 核心分析 之八Android 启动过程详解
Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...
- Android GLSurfaceView用法详解(二)
输入如何处理 若是开发一个交互型的应用(如游戏),通常需要子类化 GLSurfaceView,由此可以获取输入事件.下面有个例子: java代码: package eoe.ClearTes ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
- android屏幕适配详解
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...
- Android.mk文件详解(转)
源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真 ...
- Android Studio 插件开发详解四:填坑
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78265540 本文出自[赵彦军的博客] 在前面我介绍了插件开发的基本流程 [And ...
随机推荐
- django-模板之URL标签(五)
book/views.py from django.shortcuts import render def index(request): return render(request,"in ...
- 我是如何在一周内拿到4份offer的?
前言 大概一个月没写博客了吧,这段时间事情比较多(家里有事,请了一段时间假,正好利用剩余几天时间面了几次试),也没抽出来时间写博客,还好所有的事情已经处理完了,今天闲来无事就整理一下这几次面试过程中遇 ...
- opacity层叠问题
使用了position属性值为 absolute.relative 的层,将会比普通层更高层次.使用了小于1的opacity属性的层,也比普通层更高层次并且和指定 position 的层同层,但是不支 ...
- 利用python的requests和BeautifulSoup库爬取小说网站内容
1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...
- MongoDB的基础命令
MongoDB的介绍 MongoDB: 是一个基于bson(二进制json)的NoSQL数据库 MongoDB的三要素: 数据库: 类似于MYSQL的数据库 集合: 类似于MYSQL的表 文档: 类似 ...
- Docker的Ubuntu16.04容器如何汉化
最近发现docker hub中的vnc镜像大部分是没有安装语言包的,试了好多天才把他搞出来. 下面为实现步奏. 网盘软件地址 ://pan.baidu.com/share/link?shareid=3 ...
- Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...
- 【控制系统数字仿真与CAD】实验二:结构图法数字仿真
一. 实验目的 1. 掌握结构图法仿真复杂控制系统的方法: 2. 掌握复杂系统联接矩阵W和输入联接矩阵W0的求解过程: 3. 掌握复杂系统的环节连接,矩阵A. B. C.D的求解过程: 4. 掌握MA ...
- 曹工杂谈:为什么很少需要改Spring源码,因为扩展点太多了,说说Spring的后置处理器
前言 最近发了好几篇,都是覆盖框架源码,但是spring的代码,我是从没覆盖过,毕竟,如果方便扩展,没谁想去改源码,而spring就是不需要改源码的那个,真的是"对扩展开放,对修改关闭&qu ...
- Python脚本之——API自动化框架总结
学完了Python脚本接口自动化之后,一直没有对该框架做总结,今天终于试着来做一份总结了. 框架结构如下图: 来说一下每个目录的作用: Configs:该目录下存放的是.conf,.ini文件格式的配 ...