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,闲话打住,咱 ...
随机推荐
- HDU 4891 The Great Pan
模拟题. #include<map> #include<set> #include<ctime> #include<cmath> #include< ...
- CNN-感受野
CNN中感受野的计算:http://blog.csdn.net/kuaitoukid/article/details/46829355(好像有错误)http://blog.csdn.net/green ...
- BZOJ 4873 寿司餐厅(最大权闭合图 网络流)
寿司餐厅 时间限制: 1 Sec 内存限制: 512 MB提交: 6 解决: 3[提交][状态][讨论版] 题目描述 Kiana 最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序 ...
- 关于ARM的开发环境IAR工程的配置问题
1设置路径使IAR能够自动关联你的头文件 a.将自己的头文件..c文件..s文件放在不同的文件当中.(此处的.C文件和.S文件以及头文件都是开始一个项目所必须有的文件.例如每一个项目都需要对UArt串 ...
- [BZOJ2286][SDOI2011]消耗战(虚树DP)
2286: [Sdoi2011]消耗战 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4998 Solved: 1867[Submit][Statu ...
- 【SAM】BZOJ2882-工艺
[题目大意] 求一个循环数列的最小表示法. [思路] 最小表示法的正解:★ SAM乱搞,和前面的POJ那道一样.然而MLE了,当作学习一下map的用法^ ^ map的使用方法(来源:☆) 一.map的 ...
- [HDU4729]An Easy Problem for Elfness
[HDU4729]An Easy Problem for Elfness 题目大意: 给你一棵\(n(n\le10^5)\)个点的树,树上每条边都有容量. \(m(m\le10^5)\)次询问,每次询 ...
- [转]ssm整合1(环境搭建)
1 MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建http://blog.csdn.net/zhshulin/article/details/307798732 apache-m ...
- Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) E. Robot Arm 线段树
E. Robot Arm 题目连接: http://www.codeforces.com/contest/618/problem/E Description Roger is a robot. He ...
- IIS服务器80端口却已被占用的问题
一.问题背景 在IIS中发布一个asp网站,发现无法使用80端口,错误为“无法启动该网站.其它网站可能正在使用同一端口”.但其实IIS的其它网站已经没有使用该端口了.这就需要设计到,找到那个进程占用这 ...