1. 配置

首先去git上下载jar包,一个是androidannotations.jar,一个是androidannotations-api.jar。

新建我们的Android工程,将androidannotations-api.jar放入libs目录中,然后新建一个目录compile-lib,将androidannotations放进取,右键我们的工程-->Properties-->Java Compiler-->Annotation Processing-->勾选Enable project specific settings和底下的两个选择框,然后点击左侧Factory Path,添加我们刚才compile-lib中的jar包,即可。

2. 框架的使用

注意,使用AndroidAnnotation后,所有四大组件的名字后面都需要加一个"_"。

(1). @EActivity

在Activity的上面使用@符号即可添加注解,例如:

@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {<span style="white-space:pre"> </span>@ViewById(R.id.button1)
<span style="white-space:pre"> </span>Button button;<span style="white-space:pre">  </span>@Override
<span style="white-space:pre"> </span>protected void onCreate(Bundle savedInstanceState) {
<span style="white-space:pre">     </span>super.onCreate(savedInstanceState);
<span style="white-space:pre"> </span>}<span style="white-space:pre">   </span>@Click(R.id.button1)
<span style="white-space:pre"> </span>public void startAcitvity() {
<span style="white-space:pre">     </span>startActivity(new Intent(MainActivity.this, SecondActivity_.class));
<span style="white-space:pre"> </span>}
}

看出来可以很方便的省去我们之前的findViewById方法。

(2). @EService

新建一个Service:

@EService
public class MyService extends Service {@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.i("THR", "onStartCommand");return super.onStartCommand(intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent) {return null;}}

和Activity的差不多:

 @Click(R.id.button1)public void startService() {startService(new Intent(this, MyService_.class));}

注意都需要在manifest文件中配置,不能忘记下划线"_"。

(3). @ViewById查找控件

 @ViewById(R.id.textView1)TextView textView1;@ViewById(R.id.textView2)TextView textView2;@AfterViewspublic void setTextView() {textView1.setText("Text1");textView2.setText("Text2");}

如果不指定ViewById后面的id的话,它会默认的去寻找和我们变量名一致的id,如果找到则可以正常运行,找不到就会报空指针的异常。

(4). @ViewsById查找多个控件

还有一种方法使用ViewsById:

 @ViewsById({ R.id.textView1, R.id.textView2 })List<TextView> list;@AfterViewspublic void setTextView() {list.get(0).setText("Text1");list.get(1).setText("Text2");}

同样很简单。

(5). @Click点击事件

<span style="white-space:pre">  </span>@ViewById(R.id.textView1)
<span style="white-space:pre"> </span>TextView textView1;
<span style="white-space:pre"> </span>@ViewById
<span style="white-space:pre"> </span>TextView textView2;<span style="white-space:pre"> </span>@Click({ R.id.textView1, R.id.textView2 })
<span style="white-space:pre"> </span>public void showToast() {
<span style="white-space:pre">     </span>Toast.makeText(this, "点击事件", 1).show();
<span style="white-space:pre"> </span>}<span style="white-space:pre">   </span>@AfterViews
<span style="white-space:pre"> </span>public void setTextView() {
<span style="white-space:pre">     </span>textView1.setText("TextView1");
<span style="white-space:pre">     </span>textView2.setText("TextView2");
<span style="white-space:pre"> </span>}

使用@Click注解,还可以给多个View添加点击事件。

@LongClick的使用和这个差不多,这里就不做介绍了。

(6). @Extra可以方便传递参数

第一个Activity中:

 public static final String NAME = "name";public static final String AGE = "age";@Click(R.id.button1)public void startActivity() {Intent intent = new Intent(this, SecondActivity_.class);intent.putExtra(NAME, "Jerry");intent.putExtra(AGE, 27);startActivity(intent);}

SecondActivity中:

 @Extra(MainActivity.NAME)String name;@Extra(MainActivity.AGE)int age;@ViewById(R.id.name_view)TextView nameView;@ViewById(R.id.age_view)TextView ageView;@AfterViewspublic void initView() {nameView.setText(name);ageView.setText(age + "");}

(7). @ItemClick、@ItemLongClick和@Touch

这个主要用在ListView上:

 @ViewById(R.id.listView)ListView listView;@ItemClick(R.id.listView)public void listViewItemClick(int p) {Toast.makeText(this, p + "good", 0).show();}

ItemLongClick和这个使用方法类似。

(8). @Background处理后台任务的方法

 @Backgroundpublic void doSomething() {Log.i("THR", "Background线程id" + Thread.currentThread().getId());}@Click(R.id.button1)public void startActivity() {doSomething();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.i("THR", "MainActivity线程id" + Thread.currentThread().getId());}

通过运行发现,这个方法是运行在子线程中的。

(9). @UiThread

修改代码:

 @Backgroundpublic void doSomething() {Log.i("THR", "Background线程id" + Thread.currentThread().getId());updateUi();}@UiThreadpublic void updateUi() {<pre name="code" class="java"><pre name="code" class="java">      Log.i("THR", "updateUi线程id" + Thread.currentThread().getId());

textView1.setText("更新UI");} 可以使得更新UI的操作在主线程中调用,不会报异常。

(10). @StringRes获取资源文件中的String

 @StringRes(R.string.name)String name;

还有@DimensionRes的使用都类似:

 @DimensionRes(R.dimen.activity_horizontal_margin)double size;

(11). @WindowFeature窗口样式

无标题样式:

@WindowFeature({ Window.FEATURE_NO_TITLE, Window.FEATURE_INDETERMINATE_PROGRESS })
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {

4. 查看Activity_

右键工程-->Java Compiler-->Annotation Processing-->Generated source directory:-->去掉apt_generated前面的点。

5. 总结

在使用这个框架的时候要注意以下几点:

(1). 注册同名的Activity_

(2). View的修饰不能为private的

(3). 注解注释的方法和字段不能是private的

Log.i("THR", "Background线程id" + Thread.currentThread().getId());

【Android进阶】(1)使用开源框架AndroidAnnotation相关推荐

  1. Android APK的主流开源框架

    主流开源框架 View框架 1.ButterKnife 2.ViewBinding 图片框架 1.Glide 快速高效的Android图片加载库,注重于平滑的滚动 2.Picasso Square 开 ...

  2. android 一些好的开源框架

    GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你 ...

  3. aop拦截mybatis执行sql_Java进阶架构之开源框架面试题系列:Spring+SpringMVC+MyBatis

    开源框架 Spring5 Framework体系结构 spring5概述 Spring5环境搭建 Spring MVC AOP源码解析 IOC源码解析 Mybatis spring 什么是Spring ...

  4. 六款值得推荐的android(安卓)开源框架简介

    1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling ...

  5. Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。...

      <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...

  6. 2017 Android GitHub常用热门开源框架汇总

    现在 GitHub 上流行的开源库极大地节省了开发者从 0 开发的时间,很多公司和个人都在 GitHub 上开源自己的项目,今天我们就来整理一下 Android 开发中一些非常流行的库,也是我们必须掌 ...

  7. Android 图片加载开源框架Fresco,基于各种使用场景的讲解

    Fresco是Facebook开源Android平台上一个强大的图片加载库,也是迄今为止Android平台上最强大的图片加载库. 优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理 ...

  8. android glide图片框架,【Android 进阶】图片载入框架之Glide(示例代码)

    简单介绍 在泰国举行的谷歌开发人员论坛上,谷歌为我们介绍了一个名叫 Glide 的图片载入库,作者是 bumptech.这个库被广泛的运用在 google 的开源项目中,包含 2014 年 googl ...

  9. 百家争鸣:Android开源框架排行榜

    一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...

  10. Android常用开源框架

    快速索引 框架名称 上榜关键字 1.Retrofit 网络 2.okhttp 网络 3.Butter Knife 代码模板 4.MPAndroidChart 图表 5.glide 图片 6.leakc ...

最新文章

  1. 2019-7-29 考试总结
  2. android中使用哪种方式解析XML比較好
  3. springboot拦截请求路径_SpringBoot整合Ant Design Pro进行部署
  4. 二叉树题目----2 检查两颗树是否相同 和 对称二叉树的判定
  5. java后台解析json并保存到数据库_[Java教程]ajax 发送json 后台接收 遍历保存进数据库...
  6. exit和abort都是用来终止程序的函数
  7. nginx服务器能ping通,访问不了的解决办法
  8. inner join 重复数据_pandas数据合并菜谱
  9. 【FlexSim2019】仿真软件入门笔记:基本操作、快捷键、事件驱动、控制与程序
  10. 如何开启BBR算法优化ss
  11. 对Ajax回调函数中返回错误信息的处理及常见情况整理
  12. windows下使用命令行禁用笔记本自带键盘
  13. Tkinter教程之Label篇
  14. 英语中的开音节,闭音节
  15. 链表的有序集合(java)
  16. postgresql standard_conforming_strings参数
  17. MySQL日期类型及默认设置
  18. python登陆百度网盘_百度网盘命令行版本bypy
  19. 刘德华--1野性的自然
  20. <Linux开发>linux开发工具- 之-TFTP

热门文章

  1. windows 安装SNMP MIB Browser
  2. 【研一周小结】第八-九周个人学习总结
  3. 向右箭头代码css,CSS的箭头代码
  4. 5G+AIoT趋势下,智慧社区的发展机遇与趋势
  5. N1完美刷入Armbian系统
  6. 淘宝图片上传接口,淘宝图片搜索商品接口,以图搜货接口,淘宝拍立淘接口
  7. matlab的比较器模块,simulink中的比较器
  8. 生成arp报文的verilog实现
  9. mysql sql语句 查询文章表,评论表(根据评论表文章评论次数排序查询出文章count(),group,left join)
  10. 在 linux ubuntu 18.04 上运行QQ音乐