【Android进阶】(1)使用开源框架AndroidAnnotation
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相关推荐
- Android APK的主流开源框架
主流开源框架 View框架 1.ButterKnife 2.ViewBinding 图片框架 1.Glide 快速高效的Android图片加载库,注重于平滑的滚动 2.Picasso Square 开 ...
- android 一些好的开源框架
GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你 ...
- aop拦截mybatis执行sql_Java进阶架构之开源框架面试题系列:Spring+SpringMVC+MyBatis
开源框架 Spring5 Framework体系结构 spring5概述 Spring5环境搭建 Spring MVC AOP源码解析 IOC源码解析 Mybatis spring 什么是Spring ...
- 六款值得推荐的android(安卓)开源框架简介
1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling ...
- Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。...
<Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...
- 2017 Android GitHub常用热门开源框架汇总
现在 GitHub 上流行的开源库极大地节省了开发者从 0 开发的时间,很多公司和个人都在 GitHub 上开源自己的项目,今天我们就来整理一下 Android 开发中一些非常流行的库,也是我们必须掌 ...
- Android 图片加载开源框架Fresco,基于各种使用场景的讲解
Fresco是Facebook开源Android平台上一个强大的图片加载库,也是迄今为止Android平台上最强大的图片加载库. 优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理 ...
- android glide图片框架,【Android 进阶】图片载入框架之Glide(示例代码)
简单介绍 在泰国举行的谷歌开发人员论坛上,谷歌为我们介绍了一个名叫 Glide 的图片载入库,作者是 bumptech.这个库被广泛的运用在 google 的开源项目中,包含 2014 年 googl ...
- 百家争鸣:Android开源框架排行榜
一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...
- Android常用开源框架
快速索引 框架名称 上榜关键字 1.Retrofit 网络 2.okhttp 网络 3.Butter Knife 代码模板 4.MPAndroidChart 图表 5.glide 图片 6.leakc ...
最新文章
- 2019-7-29 考试总结
- android中使用哪种方式解析XML比較好
- springboot拦截请求路径_SpringBoot整合Ant Design Pro进行部署
- 二叉树题目----2 检查两颗树是否相同 和 对称二叉树的判定
- java后台解析json并保存到数据库_[Java教程]ajax 发送json 后台接收 遍历保存进数据库...
- exit和abort都是用来终止程序的函数
- nginx服务器能ping通,访问不了的解决办法
- inner join 重复数据_pandas数据合并菜谱
- 【FlexSim2019】仿真软件入门笔记:基本操作、快捷键、事件驱动、控制与程序
- 如何开启BBR算法优化ss
- 对Ajax回调函数中返回错误信息的处理及常见情况整理
- windows下使用命令行禁用笔记本自带键盘
- Tkinter教程之Label篇
- 英语中的开音节,闭音节
- 链表的有序集合(java)
- postgresql standard_conforming_strings参数
- MySQL日期类型及默认设置
- python登陆百度网盘_百度网盘命令行版本bypy
- 刘德华--1野性的自然
- <Linux开发>linux开发工具- 之-TFTP
热门文章
- windows 安装SNMP MIB Browser
- 【研一周小结】第八-九周个人学习总结
- 向右箭头代码css,CSS的箭头代码
- 5G+AIoT趋势下,智慧社区的发展机遇与趋势
- N1完美刷入Armbian系统
- 淘宝图片上传接口,淘宝图片搜索商品接口,以图搜货接口,淘宝拍立淘接口
- matlab的比较器模块,simulink中的比较器
- 生成arp报文的verilog实现
- mysql sql语句 查询文章表,评论表(根据评论表文章评论次数排序查询出文章count(),group,left join)
- 在 linux ubuntu 18.04 上运行QQ音乐