Support Annotation Library注解使用详解
一.Support Annotation Library能做什么
Support Annotation Library包含一系列的元注解,能够帮助开发者在编译期间发现可能存在的Bug,另外Android Studio本身就支持Annotation Library所以开发者无需再次添加依赖。
二.常用注解详解
1.@NonNull与@Nullable注解
@NonNull:表示参数或者返回值不能为空。
@Nullable:表示参数或者返回值可以为空。
新建一个测试方法给参数加上@NonNull并且传参为null,这时方法会报警告,并且用Android Lint进行检查也会显示警告。
当切换成@Nullable注解时警告则会消失
2.资源类型的注解
AnimatorRes:标记资源类型为android.R.animator类型
AnimRes:标记资源类型为android.R.anim类型
AnyRes:标记为任何一种资源类型
ArrayRes:标记资源类型为android.R.array类型
AttrRes:标记资源类型为android.R.attr类型
BoolRes:标记资源类型为布尔类型
ColorRes:标记资源类型是android.R.color类型
DrawableRes:标记资源类型为android.R.drawable类型
FractionRes:表示资源类型为fraction类型,这个比较少见,常见于Animation.xml中,比如50%p,表示占parent的50%。
IdRes:表示资源类型为android.R.id类型
IntegerRes:表示资源类型为android.R.integer类型
InterpolatorRes:表示资源类型为android.R.interpolator类型
LayoutRes:表示资源类型为android.R.layout类型
MenuRes:表示资源类型为androdi.R.menu类型
RawRes:表示资源类型为android.R.raw类型
StringRes:表示资源类型为android.R.string类型
StyleableRes:表示资源类型为android.R.styleable
StyleRes:表示资源类型为android.R.style类型
TransitionRes:表示资源类型为transition类型
XmlRes:表示资源类型为android.R.xml类型
资源型注解主要是防止因填写错误的资源类型而产生的错误,举个栗子:我们新建一个方法,在参数前加上@StringRes注解,然后调用的时候传入color类型,这时Android Studio会报错。
3.颜色类型的注解
颜色注解一共有两个,资源类型使用@ColorRes,在RGB或ARGB值则使用@ColorInt
4.取值范围注解
●@Size:可以限制数组集合或者字符串的大小,例如:
@Size(min=3):可以表示字符串的最小字符数为3
@Size(max=23):可以表示集合的元素个数最大为23
@Size(2):可以表示数组的元素个数为2
@Size(multiple=2):可以表示数组的大小是2的倍数
●@IntRange:参数类型是int或lang,用法如下
private void test7(@IntRange(from = 0,to = 255)int alpha){ }
●FloatRange:参数类型是float或者double,用法如下
private void test8(@FloatRange(from = 0,to = 1)float alpha){ }
5.权限注解
Android应用在使用某些系统功能时,需要在AndroidManifest.xml中声名权限,否则在运行的时候可能会因为缺失对应的权限而发生错误,所以为了在编译期间及时发现缺失的权限,我们可以使用@RequiresPermission。
声明一个权限
@RequiresPermission(Manifest.permission.INTERNET) private void test8(){ }
声明最少一个权限
@RequiresPermission(anyOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE}) private void test8(){ }
声明多个权限
@RequiresPermission(allOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE}) private void test8(){ }
对于Intent调用所需权限,可在Action字符串定义处添加注解
6.重写函数注解(要求必须调用父类的方法)
新建一个类MyTest,并新建方法test然后加上@CallSuper注解
public class MyTest { @CallSuper protected void test(){ } }
新建一个类MyTest2继承MyTest,重写test方法
public class MyTest2 extends MyTest { @Override protected void test() { super.test(); } }
如果将super.test()去掉则会报错。
7.@VisibleForTesting
单元测试中可能要访问到一些不可见的类、函数或者变量,这时可以使用@VisibleForTesting注解来对其可见
8.@Keep
@Keep注解用来标记在Proguard混淆过程中不需要混淆的类或者方法。
@Keep public class MyTest { @CallSuper protected void test(){ } }
个人博客:https://myml666.github.io

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何解决 Android7.0之后部分手机无法抓包
最近,测试提出来这么一个问题,说公司android7.0以上的手机没办法抓包,他们拿不到数据。很是尴尬。 难道是因为android7.0近两年兴起?还是因为以前的测试就根本没抓包,,, 好了进入正题,通过一波的查阅资料过后发现:android7.0+的版本新增了证书验证,https的安全证书手机端和电脑端都必须安装,这个是前提;又由于android手机多厂商系统定制的问题,可能有部分手机确实无法抓包,这里,对于抓包的问题上,我们在给测试打包的时候要对我们的项目进行添加设置: 默认新任所有证书。 这个操作其实是比较敏感的,线上不能带上这个配置;下面来说一下相关配置项: 1、在res-xml目录中创建一个名为 “network_security_config.xml”的文件夹:并且附上如下内容: <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" overridePins...
- 下一篇
iOS 向下取整、向上取整、四舍五入
向上取整:float ceilf(float); double ceil(double); 向下取整:float floorf(float); double floor(double); 四舍五入:float roundf(float); double round(double);
相关文章
文章评论
共有0条评论来说两句吧...