我们开发过程中都需要写些findViewByid、serOnclickListener等类似的代码,虽然不费事,但是一个项目下来,工作量还是很大的。为了节省工作量,运生了很多对应的注解框架。网上的博客、身边的同事大多使用的是 xUtils、ButterKnife实现注解,我初次使用的也是ButterKnife。然而,今天小试了下Android Annotations注解框架,用起来确实比ButterKnife爽。其他的介绍和废话就不多说了,下面就介绍如何在
Android Studio中配置Android Annotations框架,以及我所发现的坑。
AA官网:http://androidannotations.org/
AA Github:https://github.com/excilys/androidannotations
AA Github wiki页:https://github.com/excilys/androidannotations/wiki
AA Github Gradle配置页:https://github.com/excilys/androidannotations/wiki/Building-Project-Gradle
以上网址是很有用的,尤其是Gradle配置页。AA框架配置比较蛋痛,看似简单,但是有很多小细节。我今天在网上搜了很多博客,都没弄成功,总是报错。英文不好而官网的配置有一直没找到。其实不用再去看其他人写的博客文档了,或过时或错误很误导人。接下来我带领大家根据官方Gradle配置搭建和使用AA框架。
一、新建一个项目。
二、在project根目录下的build.gradle文件中,添加:
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
apply plugin: 'com.android.application'
apply plugin: 'android-apt' //1处添加
def AAVersion = '4.0.0'
android {
compileSdkVersion 23
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.znke.androidannotations_test"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
apt "org.androidannotations:androidannotations:$AAVersion" //2处添加
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt { //3处添加
arguments {
androidManifestFile variant.outputs[0]?.processResources?.manifestFile//new style
//androidManifestFile variant.processResources.manifestFile //old style
resourcePackageName "com.znke.androidannotations_test" //your pakcage name
}
}
apt {
arguments {
androidManifestFile variant.outputs[0]?.processResources?.manifestFile//new style
//androidManifestFile variant.processResources.manifestFile //old style
resourcePackageName "com.znke.androidannotations_test" //your pakcage name
}
}
apt这部分是需要查找和解析androidManifestFile文件吧!切记,需要注意的地方
androidManifestFile variant.outputs[0]?.processResources?.manifestFile
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
配置完毕。接下来做个小例子试试手。第一个界面,一个输入框和一个按钮。点击按钮获取值,跳转到第二个页面并显示值。就这么简单,看看AA注解怎么用。上代码:
AndroidManifest.xml
//对,没错,最后面加下划线
MainActivity
@EActivity(R.layout.activity_main) //注入页面
public class MainActivity extends AppCompatActivity {
@ViewById
public EditText username;//如果页面的id与此处对象名一样,@ViewById后面可以省略
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);//这儿不要了
//跟UI无关的数据初始化可以写在这里
}
@Click
void submit(){//如果页面button的id和方法名一样,@Click后面可以省略
//跳转到Main2Activity界面,看看这个跳转牛逼不,包含了intent,extra带参数,start启动。
Main2Activity_.intent(this).extra("msg",username.getText().toString()).start();
}
}
R.layout.activity_main
Main2Activity
@EActivity(R.layout.activity_main2)
public class Main2Activity extends AppCompatActivity {
@ViewById
public TextView text;
//获取intent里面的扩展值
@Extra
public String msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//@EActivity(R.layout.activity_main2)处已经setContentView
//setContentView(R.layout.activity_main2);
/**
* 请关注Main2Activity_源码分析
* 懂我的意思吗?
*/
/*
Main2Activity_类的定义
public final class Main2Activity_ extends Main2Activity
implements HasViews, OnViewChangedListener {*/
/*
Main2Activity_类的onCreate方法
@Override
public void onCreate(Bundle savedInstanceState) {
......
super.onCreate(savedInstanceState);
......
setContentView(R.layout.activity_main2);
}*/
}
@Override
protected void onStart() {
super.onStart();
text.setText(msg);
}
}
R.layout.activity_main2
demo下载