AndroidAnnotations是一个开源框架,经过使用它开放出来的注解api,能够大大的减小无关痛痒的代码量,简洁代码。 官方文档_github连接java
目前最新版本为4.1.0android
applyplugin:'com.android.application'
//添加下面两行配置
applyplugin:'android-apt'
defAAVersion='4.0.0'
android{
compileSdkVersion23
buildToolsVersion"23.0.2"
dependencies{
compilefileTree(dir:'libs',include:['*.jar'])
testCompile'junit:junit:4.12'
compile'com.android.support:appcompat-v7:23.1.1'
//添加这两行配置
apt"org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
//再添加下面的配置
apt{
arguments{
androidManifestFilevariant.outputs[0].processResources.manifestFile
resourcePackageName"com.xxx.demo"(你项目的包名)
}
}复制代码
项目包名可在AndroidManifest.xml中的package确认。git
dependencies{
classpath'com.android.tools.build:gradle:1.5.0'
//添加下面这行
classpath'com.neenbedankt.gradle.plugins:android-apt:1.4+'
}复制代码
@EActivity(R.layout.acitvity_main)
public class MainActivity extends Activity{
...
}复制代码
经常使用的有@EActivity、@EFragment、@EService等,进行注解了的组件才可以使用其余注解功能。github
@ViewById(R.id.tv_title)//此处可去掉括号部分
TextView tv_title;
@ViewById
ImageView img_menu;
@ViewById
RelativeLayout rl_light;
@Extra
String mTitle;
@StringRes(R.string.hello)
String hello;复制代码
简单的控件绑定,资源文件中的id与控件名一致便可不在注解后加上括号及对应控件的id,@Extra也是。其余地方须要声明控件id的皆同理。 当View相关的成员变量初始化完毕后,会调用拥有@AfterViews注解的方法,能够在里面初始化一些界面控件等。api
@Click
void img_back() {
finish();
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
}复制代码
还有@TextChange、@ItemClick、@SeekBarProgressChange等。app
@UiThread
void doSomething(){
...
}
@Background
void doSomething(){
...
}复制代码
UI线程执行的方法加个@UiThread,异步线程方法加个@Background,二者的交互就是方法直接的相互调用,不用再使用Handler去发送接收Message了。框架
@Receiver(actions = Utils.ACTION_BLE_DISCONNETED)
public void bleDisconnect() {
...
}
@Receiver(actions = Utils.ACTION_UPDATE_WATER_SHOW)
public void updateWaterShow(@Receiver.Extra(Utils.VALUE_ADDRESS) long water) {
if (switchIsOpen)
edt_water.setText(water + "");
}复制代码
注册广播接收,简单搞定,不须要其余操做。相比下传统的方式:异步
Private final BroadcastReceiver mGattUpdateReceiver = newBroadcastReceiver(){
@Override
public void onReceive(Contextcontext,Intentintent){
final Stringaction=intent.getAction();
if(Stringaction.equal(Utils.ACTION_STOP_SCAN)){
...
}
}
};
private IntentFilter makeGattUpdateIntentFilter() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Utils.ACTION_STOP_SCAN);
return intentFilter;
}
registerReceiver(mGattUpdateReceiver,makeGattUpdateIntentFilter());
unregisterReceiver(mGattUpdateReceiver);复制代码
瞬间简洁了不少吧ide
直接使用@SharedPref能够简单地使用SharedPreferences的功能。 首先,建一个类存放须要存取的数据:gradle
@SharedPref(value=SharedPref.Scope.UNIQUE)
public interface MyPrefs {
@DefaultBoolean(true)
boolean isFirstIn();
@DefaultString("")
String ignoreVersion();
@DefaultInt(0)
int shockLevel();
}复制代码
括号后面的是默认值,接下来就是简单的使用了,首先在用到的类里声明:
@Pref
MyPrefs_ myPrefs;
boolean isFirstIn = myPrefs.isFirstIn().get();
myPrefs.isFirstIn().put(false);复制代码
使用起来特别方便,须要特别说明的是,这些数据要在一些不一样的组件中同步共享,需在@SharedPref加上(value=SharedPref.Scope.UNIQUE),以前在activity和service中的数据老是对不上,找了很久才找到缘由。
想要在普通的类中也用上注解,只需在类名加上@EBean
@EBean
public class MyClass {
@UiThread
void updateUI() {
}复制代码
使用时,声明:
@EActivity
public class MyActivity extends Activity {
@Bean
MyClass myClass;
}复制代码
有一些要注意的是: @EBean注解的类,只能有一个构造方法,且这个构造方法必须无参数或者只有context参数。 在activity等组件内声明了后,不用再去new这个类,不然会出错。
比较经常使用的一些方法及说明大概就是这些,固然Annotation还有很多东西,想要了解得更深刻能够到文首的连接处查看官方的使用说明,进一步了解!