热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SupportAnnotationLibrary注解使用详解

support,annotation,librar

一.Support Annotation Library能做什么

Support Annotation Library包含一系列的元注解,能够帮助开发者在编译期间发现可能存在的Bug,另外Android Studio本身就支持Annotation Library所以开发者无需再次添加依赖。

二.常用注解详解

1.@NonNull与@Nullable注解

@NonNull:表示参数或者返回值不能为空。

@Nullable:表示参数或者返回值可以为空。

新建一个测试方法给参数加上@NonNull并且传参为null,这时方法会报警告,并且用Android Lint进行检查也会显示警告。

img_59eac935bfcf5eab89f79bb45852b798.png
image

当切换成@Nullable注解时警告则会消失

img_f85d9a36cca0f0cd4457361e8600f0f1.png
image

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会报错。

img_b94548ec21aea0ba1fd691546b7bb1ad.png
image

3.颜色类型的注解

颜色注解一共有两个,资源类型使用@ColorRes,在RGB或ARGB值则使用@ColorInt

img_a98b0fb0efe9228ab2e47746ff3d73a2.png
image

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字符串定义处添加注解

img_8c80c637aa25d4b53823d4e60b164447.png
image

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()去掉则会报错。

img_cf4f84dbdaf90ce345bd4603276a49bb.png
image

7.@VisibleForTesting

单元测试中可能要访问到一些不可见的类、函数或者变量,这时可以使用@VisibleForTesting注解来对其可见

8.@Keep

@Keep注解用来标记在Proguard混淆过程中不需要混淆的类或者方法。

@Keep public class MyTest { @CallSuper protected void test(){ } } 

个人博客:https://myml666.github.io


推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文整理了Java中com.evernote.android.job.JobRequest.getTransientExtras()方法的一些代码示例,展示了 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
author-avatar
手机用户2502880645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有