AndroidAnnotation常用註解使用說明

2016-05-12    分類:Android開發、程式設計開發、首頁精華0人評論發表於2016-05-12

本文由碼農網 – 蘇耀東原創,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

簡介

AndroidAnnotations是一個開源框架,通過使用它開放出來的註解api,可以大大的減少無關痛癢的程式碼量,簡潔程式碼。

官方文件(github連結)

第三方庫匯入

目前最新版本為4.0.0

在app/目錄下的build.gradle(區域性gradle)中新增下面紅色粗體字配置:

applyplugin:'com.android.application'
applyplugin:'android-apt' defAAVersion='4.0.0'

android{
compileSdkVersion23
buildToolsVersion"23.0.2"

defaultConfig{
applicationId"com.xxx.demo"
minSdkVersion18
targetSdkVersion23
versionCode1
versionName"1.0"
}

buildTypes{
release{
minifyEnabledfalse
proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
}

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確認。

在gradle/目錄下的build.gradle檔案(全域性gradle)中新增下面紅色粗體字配置:

buildscript{
repositories{
jcenter()
}
dependencies{
// replace with the current version of the Android plugin
classpath'com.android.tools.build1.5.0'
// replace with the current version of the android-apt plugin
classpath'com.neenbedankt.gradle.plugins:android-apt:1.4+'
}
}

allprojects{
repositories{
jcenter()
}
}

taskclean(type:Delete){
deleterootProject.buildDir
}

常用註解

元件註解

@EActivity(R.layout.acitvity_main)
public class MainActivity extends Activity{
...
}

常用的有@EActivity、@EFragment、@EService等,進行註解了的元件才可使用其他註解功能。

資源引用的註解

@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註解的方法,可以在裡面初始化一些介面控制元件等。

事件繫結

@Click
    void img_back() {     
        finish();
        overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
    }

還有@TextChange、@ItemClick、@SeekBarProgressChange等。

比較方便的一些註解

非同步執行緒與UI執行緒

@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);

瞬間簡潔了很多吧

SharedPreferences

直接使用@SharedPref可以簡單地使用SharedPreferences的功能。

首先,建一個類存放需要存取的資料:

@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中的資料總是對不上,找了好久才找到原因。

@EBen

想要在普通的類中也用上註解,只需在類名加上@EBean

@EBean
public class MyClass {
  @UiThread
  void updateUI() {
}

使用時,宣告:

@EActivity
public class MyActivity extends Activity {
  @Bean
  MyClass myClass;
}

有一些要注意的是:

@EBean註解的類,只能有一個構造方法,且這個構造方法必須無引數或者只有context引數。

在activity等元件內宣告瞭後,不用再去new這個類,否則會出錯。

總結

比較常用的一些方法及說明大概就是這些,當然Annotation還有不少東西,想要了解得更深入可以到文首的連結處檢視官方的使用說明,進一步瞭解!

本文連結:http://www.codeceo.com/article/android-annotation-usage.html
本文作者:碼農網 – 蘇耀東
原創作品,轉載必須在正文中標註並保留原文連結和作者等資訊。]

相關文章