support-annotations是Android官方提供的一个注解库,它提供了许多有用的注解,这些注解的生命周期为ClASS,也就是在编译之后则不再保留,通常用于辅助代码上的静态检查。
在Gradle中引入这个库的方式通常如下:
作用范围:方法(指定方法的返回值是某个资源类型)、方法参数、类中的成员变量、方法中的局部变量。
AnimRes:指出一个integer的参数,成员变量,或方法返回值是一个anim资源的引用。
AnyRes:指出一个integer的参数,成员变量,或方法返回值是一个任意资源类型的引用。
ArrayRes:指出一个integer的参数,成员变量,或方法返回值是一个array资源类型的引用。
AttrRes:指出一个integer的参数,成员变量,或方法返回值是一个attr资源的引用。
BoolRes:指出一个integer的参数,成员变量,或方法返回值是一个boolean资源的引用。
ColorRes:指出一个integer的参数,成员变量,或方法返回值是一个color资源的引用。
DimenRes:指出一个integer的参数,成员变量,或方法返回值是一个dimen资源的引用。
DrawableRes:指出一个integer的参数,成员变量,或方法返回值是一个drawable资源的引用(包括@mipmap)。
FractionRes:指出一个integer的参数,成员变量,或方法返回值是一个fraction资源的引用。
IdRes:指出一个integer的参数,成员变量,或方法返回值是一个id资源的引用。
IntegerRes:指出一个integer的参数,成员变量,或方法返回值是一个integer资源的引用。
InterpolatorRes:指出一个integer的参数,成员变量,或方法返回值是一个interpolator资源的引用。
LayoutRes:指出一个integer的参数,成员变量,或方法返回值是一个layout资源的引用。
MenuRes:指出一个integer的参数,成员变量,或方法返回值是一个menu资源的引用。
PluralsRes:指出一个integer的参数,成员变量,或方法返回值是一个plurals资源的引用。
RawRes:指出一个integer的参数,成员变量,或方法返回值是一个raw资源的引用。
StringRes:指出一个integer的参数,成员变量,或方法返回值是一个string资源的引用。
StyleableRes:指出一个integer的参数,成员变量,或方法返回值是一个styleable资源的引用。
StyleRes:指出一个integer的参数,成员变量,或方法返回值是一个style资源的引用。
TransitionRes:指出一个integer的参数,成员变量,或方法返回值是一个transition资源的引用。
XmlRes:指出一个integer的参数,成员变量,或方法返回值是一个xml资源的引用。
ColorInt:指出一个被注解的元素,是一个int颜色值,表示的是AARRGGBB。
BinderThread:只能在binder线程中被调用。
MainThread:只能在主线程中被调用。
WorkerThread:只能在工作线程(子线程)中被调用。
UiThread:只能在UI线程中被调用。
- NonNull:指出一个参数,变量,或方法返回值永远不可为null。
- Nullable:指出一个参数,变量,或方法返回值可能为null。
Keep:指出被混淆的时候应该被保留,通常用来保留那些需要被用来反射的类、构造函数、方法、字段等。
在Gradle中引入这个库的方式通常如下:
compile 'com.android.support:support-annotations:25.1.0'
通过使用support-annotations的注解,我们可以限定一些变量、方法参数或者是方法返回值的范围,这些注解涵盖的使用范围如下:
资源类注解
命名:资源分类+Res作用范围:方法(指定方法的返回值是某个资源类型)、方法参数、类中的成员变量、方法中的局部变量。
比如
public class ResourceTest{
@AnimatorRes
private int animator; //成员变量
@AnimatorRes //方法返回值
public int getAnimator(){
return android.R.animator.fade_in;
}
public void animator(@AnimatorRes int animator){ //方法参数
}
public void animate(){
@AnimatorRes
int animator=android.R.animator.fade_in; //局部变量
}
}
AnimatorRes :指出一个integer的参数,成员变量,或方法返回值是一个animator资源的引用。
AnimRes:指出一个integer的参数,成员变量,或方法返回值是一个anim资源的引用。
AnyRes:指出一个integer的参数,成员变量,或方法返回值是一个任意资源类型的引用。
ArrayRes:指出一个integer的参数,成员变量,或方法返回值是一个array资源类型的引用。
AttrRes:指出一个integer的参数,成员变量,或方法返回值是一个attr资源的引用。
BoolRes:指出一个integer的参数,成员变量,或方法返回值是一个boolean资源的引用。
ColorRes:指出一个integer的参数,成员变量,或方法返回值是一个color资源的引用。
DimenRes:指出一个integer的参数,成员变量,或方法返回值是一个dimen资源的引用。
DrawableRes:指出一个integer的参数,成员变量,或方法返回值是一个drawable资源的引用(包括@mipmap)。
FractionRes:指出一个integer的参数,成员变量,或方法返回值是一个fraction资源的引用。
IdRes:指出一个integer的参数,成员变量,或方法返回值是一个id资源的引用。
IntegerRes:指出一个integer的参数,成员变量,或方法返回值是一个integer资源的引用。
InterpolatorRes:指出一个integer的参数,成员变量,或方法返回值是一个interpolator资源的引用。
LayoutRes:指出一个integer的参数,成员变量,或方法返回值是一个layout资源的引用。
MenuRes:指出一个integer的参数,成员变量,或方法返回值是一个menu资源的引用。
PluralsRes:指出一个integer的参数,成员变量,或方法返回值是一个plurals资源的引用。
RawRes:指出一个integer的参数,成员变量,或方法返回值是一个raw资源的引用。
StringRes:指出一个integer的参数,成员变量,或方法返回值是一个string资源的引用。
StyleableRes:指出一个integer的参数,成员变量,或方法返回值是一个styleable资源的引用。
StyleRes:指出一个integer的参数,成员变量,或方法返回值是一个style资源的引用。
TransitionRes:指出一个integer的参数,成员变量,或方法返回值是一个transition资源的引用。
XmlRes:指出一个integer的参数,成员变量,或方法返回值是一个xml资源的引用。
颜色注解
假如我们定义了一个方法用来设置颜色,但是因为表示颜色用的是int类型,这样就会导致使用的人无法区分是要传一个表示颜色的资源还是颜色值,对于这种情况,support-annotations给我们提供了以下这个注解:ColorInt:指出一个被注解的元素,是一个int颜色值,表示的是AARRGGBB。
比如
public void setTextColor(@ColorInt int color);
线程相关
用来指定被注解的方法、构造函数、类只能运行在的某个线程中。如果注解定义在类上,则该类中的所有方法都只能运行在该线程中。BinderThread:只能在binder线程中被调用。
MainThread:只能在主线程中被调用。
WorkerThread:只能在工作线程(子线程)中被调用。
UiThread:只能在UI线程中被调用。
空指针检查
通常我们如果对一个变量进行主动的赋值为null,编译器可能会进行可能引发空指针异常的警告,我们可以使用以下注解对这种行为进行控制。- NonNull:指出一个参数,变量,或方法返回值永远不可为null。
- Nullable:指出一个参数,变量,或方法返回值可能为null。
取值范围
FloatRange:指出一个被注解的元素应该是一个给定范围内的float值或double值。比如:
@FloatRange(from=0.0,to=1.0)
public float getAlpha() {
...
}
IntRange:指出一个被注解的元素应该是一个给定范围内的int值或long值。
@IntRange(from=0,to=255)
public int getAlpha() {
...
}
其他相关的注解
CallSuper:指出一个方法如果被重写了,它必须也被调用。比如Activity的生命周期方法onCreate方法等。Keep:指出被混淆的时候应该被保留,通常用来保留那些需要被用来反射的类、构造函数、方法、字段等。
Size:表示一个被注解的元素应该有一个给定的大小或长度。通过用于数组或集合
比如
public void getLocationInWindow(@Size(2) int[] location) {
...
}