Android Annotations浅析
这阵子遇到了好多事情,挺久没来更新博文了,这两天在学这个开源框架Android Annotations,用起来感觉挺方便的,
相信用过Spring注解的孩子理解起来应该比較easy!
就是配置起来比較吃力。
关于AndroidAnnotaions的介绍,网上已经非常多了,我这里不再累赘。
1、AndroidAnnotations官网:http://androidannotations.org/(或许你须要翻墙)
2、eclipse中使用androidannotations的配置方法说明:https://github.com/excilys/androidannotations/wiki/Eclipse-Project-Configuration
3、Android Studio中配置AndroidAnnotations:(这个是我这篇博文中要涉及到的!
)
一、Android Studio配置androidannotations环境。
1、首先你建立一个module之后,在相应的app中会有一个名为build.gradle的文件(该module有效),而在整个项目外面也会有一个名为build.gradle的文件(全局有效)【这个工具中的application的文件夹下(相当于Eclipse下的workspace)是能够有多个module的(相当于Eclipse下的project)】
2、我们配置的时候大概要分为以下两步
在局部build.gradle中(增加红色字体部分):
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def AAVersion = '3.0.1'
android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.tongbu.mytest"
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt {
arguments {
androidManifestFile variant.processResources.manifestFile
resourcePackageName 'com.tongbu.mytest'
}
}
在全局build.gradle中(增加红色字体部分):
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.3'
}
}
allprojects {
repositories {
jcenter()
}
}
假设以上的都顺利完毕了。那么恭喜你已经快配置完了,还须要把AndroidManifest.xml中的Activity的名字后面加上 _(下划线),由于这个框架解析编译的时候,比方类MainActivity会被解析成MainActivity_.class。所以在清单文件里我们要在Activity的名字后面加一个下划线。或者androidannotation会报错!
但并不会这么顺利。在你补充完下划线之后。你会发现会提示你找不到MainActivity_这个东东
那么怎么办呢??我们说了它是在编译的时候整出来的。那我们仅仅要按一下编译的按钮就可以生成了!!
这样子androidannotation在android studio上的环境就配置好了。Eclipse的话资料比較多。再这里就不介绍了
二、一个Demo来了解androidannotations的部分注解
@NoTitle //无标题
@Fullscreen //全屏
@EActivity(R.layout.activity_my)
public class MyActivity extends ActionBarActivity {
//==============================================主要的注解=================================================
@ViewById
Button button1; @ViewById
Button button2; @ViewById(R.id.textview1) //指定id的注入
TextView textView; @ViewById
ProgressBar progressBar; @ViewById
ImageView imageView; //获取系统service的方法(代替原来的clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);)
@SystemService
ClipboardManager clipboardManager; @Click({R.id.button1,R.id.button2,R.id.button3,R.id.button4})
public void simpleButtonOnClicked(View view){
switch (view.getId()){
case R.id.button1:{
textView.setText("Button1 is Clicked!");
}
break;
case R.id.button2:{
textView.setText("Button2 is Clicked!");
}
break;
case R.id.button3:{
String content = clipboardManager.getText().toString();
Toast.makeText(getApplicationContext(),"剪贴板内容: " + content, Toast.LENGTH_SHORT).show();
}
break;
case R.id.button4:{
Toast.makeText(getApplicationContext(),"滚动栏開始了!",Toast.LENGTH_SHORT).show();
progressBarWorks();
}
break;
}
} @LongClick({R.id.button2})
public void buttonOnLongClicked(View view){
switch (view.getId()){
case R.id.button1:{
textView.setText("Button1 is LongClicked!");//由于没注冊,所以不可能被触发
}
break;
case R.id.button2:{
textView.setText("Button2 is LongClicked!");//可触发
}
break;
}
} //===================================================关于资源的注解========================================= @AnimationRes(R.anim.rotate)
Animation animationRotate; @DrawableRes(R.drawable.myphoto)
Drawable myphoto; @ColorRes(R.color.love)
Integer mycolor; @TextRes(R.string.textres)
CharSequence text; @Click({R.id.button5,R.id.button6,R.id.button7})
public void animationButtonOnClicked(View view){
switch (view.getId()){
case R.id.button5:{
imageView.startAnimation(animationRotate);
}
break;
case R.id.button6:{
imageView.setImageDrawable(myphoto);
}
break;
case R.id.button7:{
Toast.makeText(getApplicationContext(),text.toString(),Toast.LENGTH_SHORT).show();
}
break;
}
} //==============================================关于线程的注解================================================
//相当于一个新的任务AsyncTask或者新线程Thread
@Background
public void progressBarWorks(){
//相当于一个新的线程中运行: @Background
int i = 1;
while (i <= 10){
Log.e("progress","进度: " + i);
try {
Thread.sleep(1000);
updateProgressBar(i);
//直接progressBar.setProgress(i);也能够的,所以@Background注解内部可能实现了handler机制
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
} } //指代UI线程
@UiThread
public void updateProgressBar(int i){
progressBar.setProgress(i);
if (i == 10){
Toast.makeText(getApplicationContext(), "滚动栏结束",Toast.LENGTH_SHORT).show();
}
} //=======================================关于几个事件的先后顺序=============================================== @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("FirstToLast", "onCreate"); //可省略! //setContentView(R.layout.activity_my); //progressBar.setMax(100); 报错,空指针异常
//由于在onCreate()被调用的时候。@ViewById还没有被set,也就是都为null
//所以假设你要对组件进行一定的初始化,那么你要用@AfterViews注解
} @AfterViews
public void init(){
Log.e("FirstToLast","init");
progressBar.setMax(10);
} @Override
protected void onResume() {
super.onResume();
Log.e("FirstToLast","onResume");
} @Override
protected void onStart() {
super.onStart();
Log.e("FirstToLast","onStart");
} }
几个方法的先后调用顺序:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGpwaGhq/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
资源涉及的注解(不一一列举):
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGpwaGhq/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

Android Annotations浅析的更多相关文章
- 使用Android Annotations开发
使用Android Annotations框架gradle配置1.修改Module下的build.gradle apply plugin: 'com.android.application' appl ...
- Android Annotations Eclipse 配置 (3)
Android Annotations 本来我想写个 Java 版本的<RESTful客户端库:RestClient>用于 Android 应用开发,结果发现不太好写,虽然用了 Dynam ...
- Android Annotations(1)
特性: Android Annotations是一个开源的框架,用于加速 Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性. 特性: 依赖注入: inject ...
- Android Studio配置Android Annotations框架详解--说说那些坑
我们开发过程中都需要写些findViewByid.serOnclickListener等类似的代码,虽然不费事,但是一个项目下来,工作量还是很大的.为了节省工作量,运生了很多对应的注解框架.网上的博客 ...
- Android Annotations 注解例子
1.AndroidAnnotations官网: http://androidannotations.org/ (也许你需要FQ) 2.eclipse中使用androidannotations的配置方法 ...
- Android AIDL浅析及异步使用
AIDL:Android Interface Definition Language,即 Android 接口定义语言. AIDL 是什么 Android 系统中的进程之间不能共享内存,因此,需要提供 ...
- Android annotations REST
使用前: public class BookmarksToClipboardActivity extends Activity { BookmarkAdapter adapter; ListView ...
- android framework浅析_转
Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层. 1. Linux内核(Linux Kernel) 1)Android运行在linux kernel 2.6之上 ...
- Android框架浅析之锁屏(Keyguard)机制原理
最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏.状态栏.Launcher---姑且称之为“IDLE”小组,或许叫手机 美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉. OK,闲话打住,咱 ...
随机推荐
- For input string: "..."
之前在项目中通过EL表达式从cart 中取出itemPirce这个值时始终报:For input string: "${cart.itemPrice / 100}" 错误. 事故原 ...
- Maven 管理的WEB项目发布到Tomcat上
1.需要Tomcat服务器 这里可以使用已下载好的Tomcat也可以使用Maven来自动引入Tomcat插件. 通过Maven引入Tomcat服务器 在项目的pom.xml文件中project 标签中 ...
- 【leetcode】371. Sum of Two Integers
题目描述: Calculate the sum of two integers a and b, but you are not allowed to use the operator + and - ...
- ZSTU OJ 4272 最佳淘汰算法
线段树. 处理出每个位置下一个位置是哪里.然后搞个线段树找一下最大值就可以了. #include<map> #include<set> #include<ctime> ...
- CodeForces 779C Dishonest Sellers
贪心. 如果这周便宜,那么肯定这周买.另外要求这周至少买到$k$个,那么肯定是需要额外购买差价小的. #include<map> #include<set> #include& ...
- 面向对象编程课程(OOP)第二单元总结
一.设计策略 第一次作业(傻瓜式电梯): 由于是第一次写多线程作业,许多的知识还处在理论阶段,所以第一次作业写得非常的朴实无华.整个程序总共有四个类,Main类负责通过电梯类实例化一个电梯,然后通过w ...
- Linux命令之chgrp
chgrp [选项] … GROUP FILE … chgrp [选项] … --reference=RFILE FILE … chgrp命令是用来改变文件的组所有权.将改变每一个FILE的所属组为G ...
- RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡
RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机, 如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复. 所以后来 Rab ...
- RabbitMQ (十) 远程过程调用(RPC)
在远程计算机上运行一个函数并等待结果,我们通常叫这种模式为远程过程调用或者RPC. 通过 RabbitMQ 进行 RPC 很容易,客户端发送请求消息,服务器回复响应消息.为了接收响应,我们需要发送带有 ...
- 【线段树】Mayor's posters
[poj2528]Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 66154 Accept ...