对于注解这个概念刚开始不是很理解,翻阅了其他人博客,参考实现的例子开始理解与运用。以前刚开始的写android项目时,一般找定义控件并初始化控件都是调用findviewbyId,然而当一个布局页面(类似提交表单页面)下控件特别多时代码就会显得臃肿,也不方便后续维护 。后面,别人推荐下去用xutils框架发现提供注解去绑定控件,我感觉对于注解直观来看他把声明与绑定控件合在一起,代码清晰好多。有没有?

     @ViewInject(id = R.id.lv_test1)
private ListView lv_test1; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); }

下面重点需要了解注解使用的概念与语法

android api 官网描述的可以看到它是属于java.lang包下并三块内容来描述分别为元注解,接口,枚举;

下面主要介绍元注解:

1.Annotations--元注解

1)Documented--定义一个用于表示一个注释的元注解,并被认为是公共接口的一部分。Documented是一个标记注解,没有成员。

2)Inherited--定义一个用于表示注释自动继承的元注解。

3)Retention--定义用于确定注释的保留范围的元注解。(即:被描述的注解在什么范围内有效)

4)Target--定义确定什么ElementType注释可用于元注解。(即:被描述的注解可以用在什么地方)

可以参考(深入理解Java:注解(Annotation)自定义注解入门

2.用法看下面如下:

 import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewInject {
public int id();
}
@Target(ElementType.FIELD)--指该注解用于字段

@Retention(RetentionPolicy.RUNTIME)--指作用在运行时

定义注解格式:
  public @interface 注解名 {定义体} 那如何将自定义的注解与控件绑定在一起?
 /**
* 初始化findviewbyid注解
*/
public void initView(Object windowobj) {
//获取windowobj对象所在类声明的字段
Field[] fields = windowobj.getClass().getDeclaredFields();
if (fields != null && fields.length > 0) {
for (Field field : fields) {
try {
//并不是将方法的访问权限改成了public,而是取消java的权限控制检查
field.setAccessible(true);
if (field.get(this) != null)
continue;
//获取有ViewInject字段的注解对象
ViewInject viewInject = field
.getAnnotation(ViewInject.class);//
if (viewInject != null) {
int viewId = viewInject.id();
//将该字段与控件进行绑定
field.set(this, findViewById(viewId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

Android注解学习(1)的更多相关文章

  1. Android注解学习(2)

    最近考试周没什么时间写,回归正题.前面的一次简单的讲了关于注解的的基础部分,这一次分析xutils注解封装的源码(奉上github源码). 补充下:xUtils 2.x对Android 6.0兼容不是 ...

  2. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  3. Android注解使用之使用Support Annotations注解优化代码

    前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...

  4. Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  5. android注解入门 并来自己写一个框架

    介绍 这里我带大家来学习一下注解 并且用来写下一个模仿xUtils3 中View框架 此框架 可以省略activity或者fragment的 findViewById 或者设置点击事件的烦恼 我正参加 ...

  6. 开发自己的山寨Android注解框架

    目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...

  7. (转载)Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  8. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  9. Android开发学习路线图

    Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...

随机推荐

  1. iOS 页面跳转,离开之前pop掉navigationController栈中的页面

    http://blog.csdn.net/worldzhy/article/details/41312713 - (void)viewDidDisappear:(BOOL)animated { //因 ...

  2. UIAlertController高级之嵌入其他控件

    在编码过程中,我们经常遇到需要这样一个效果,就是弹出框的嵌套; 举个最简单的例子,比如你要选择时间,必然需要一个时间选择器DatePicker.但是这个选择器又是在你点击某按钮时弹出,弹出方式最常见的 ...

  3. css3快速复习

    选择器边框.阴影 border-radius: 50%; 设置正圆形背景的改变CSS3重要的新东西: ● transition 过度,让一个元素从一个样式,变为另一个样式,不再是干蹦了,而是有动画,均 ...

  4. IOS开发中如何给UIImageView添加点击事件

    1.先创建一个UIImageView控件: photeImageView = [[UIImageView alloc]init]; photeImageView.frame = CGRectMake( ...

  5. iOS 界面开发

    iOS 自动布局 iOS 界面 之 EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具 iOS应用国际化教程(2014版) iOS开发 ...

  6. grunt安装详解及失败处理

    标签: 1.官网 nodejs官网 https://nodejs.org/en/ Grunt官网 http://gruntjs.com/ Grunt插件首页  http://gruntjs.com/p ...

  7. hive CliDriver 源码分析

    664行 CliDriver main启动 public static void main(String[] args) throws Exception { int ret = new CliDri ...

  8. --@angularJS--较复杂的指令嵌套demo——综合小实例:登陆界面

    1.index.html: <!DOCTYPE HTML><html ng-app="app"><head>    <title>c ...

  9. js框架Modernizr是什么东西? 他是前端开发HTML5和CSS3的强有力前端js检测类库

    最近在研究modernizr的前端框架,发现这个Modernir对前端写页面非常友好,并且能够很快的建立起适应任何设备的html页面哦.在这里分享下基础教程,让大伙对modernizr是什么?做什么用 ...

  10. MySQL 替换部分电话号码为000

    要做敏感信息剔除,要求又不能全换成同一个号码影响测试,想了几个方法,最终采用替换部分电话号码为000来做到敏感信息覆盖. mysql>update phone setb=replace(b,su ...