Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> AndroidAnnotations介紹

AndroidAnnotations介紹

編輯:關於Android編程

官網:http://androidannotations.org/

github:https://github.com/excilys/androidannotations

AndroidAnnotations是一個能夠讓你快速進行Android開發的開源框架,它能讓你專注於真正重要的地方。

使代碼更加精簡,使項目更加容易維護,它的目標就是“FastAndroidDevelopment.Easy maintainance”。

通過一段時間的使用發現,相比原生的Android開發,確實能夠讓你少些很多代碼,它的首頁也給出了一個簡單

的例子,通過例子也可以看到代碼比之前幾乎少寫了一半。由於是開源,所以大家都可以直接拿來使用,這裡給

出AndroidAnnotations首頁和github上的項目地址AndroidAnnotations Github。

至於使用這個開源框架有什麼好處(只有不到50k大小),我這裡就不詳細翻譯github上的介紹了,就簡單說

一下特性:

1、使用依賴注入(Dependency Injection)#本博接來下幾篇的文章將要介紹的開源組件都使用DI, 不熟悉

的可以了解一下Inversion of Control(IoC)

2、簡化的線程模型(Simplified threading model)

3、事件綁定(Event binding)

4、REST Client

5、No Magic [不知道為什麼這樣稱呼,直譯過來就是:無魔法,它的意思是:AndroidAnnotations在編譯

的時候會產生一個子類(接下來你會明白),你查看這個子類,可以看到它是如何工作的]

 

環境的配置這裡就不講了,github上已經有比較詳細的介紹,這也不是本文的重點,本文重點在簡單介紹一下

AndroidAnnotations的簡單使用及和其他類似框架(BufferKnife)的不同。

我們先來看一看使用AndroidAnnotations時是如何創建Activity的:

  1. importandroid.app.Activity;
  2. importandroid.widget.EditText;
  3. importandroid.widget.TextView;
  4.  
  5. importcom.googlecode.androidannotations.annotations.Click;
  6. importcom.googlecode.androidannotations.annotations.EActivity;
  7. importcom.googlecode.androidannotations.annotations.ViewById;
  8.  
  9. @EActivity(R.layout.main)
  10. publicclassMyActivityextendsActivity{
  11.  
  12. @ViewById(R.id.myInput)
  13. EditTextmyInput;
  14.  
  15. @ViewById(R.id.myTextView)
  16. TextViewtextView;
  17.  
  18. @Click
  19. voidmyButton(){
  20. Stringname=myInput.getText().toString();
  21. textView.setText("Hello"+name);
  22. }
  23. }

 


從上邊的代碼中,我們可以看到使用了@EActivity、@ViewById、@Click三個annotation(注釋),當然它還提供

 

了其他很多annotation,這裡我就結合這段代碼介紹一下這個三個。首先@EActivity後必須要有一個layout id 來表示這

個Activity所使用的布局,遠來的onCreate方法就不用了,很明顯這樣可以讓我們少寫一些代碼;@ViewById 就和原來

的findViewById()方法一樣,值得注意的是:@ViewById後的id是可以不寫的,條件是控件變量名稱要與xml中定義的id

必須一致,也就是說 當我在xml文件中定義的TextView的id必須是:android:id="@+id/textView" . 這樣我們在@ViewById

後就不用再寫括號了,直接寫

  1. @ViewById
  2. TextViewtextView;


就可以了。但是這樣會有一個問題,運行時就會報出:NullPointerException的錯誤,我們就不能在myButton()方法中

直接使用,而是要在@AfterView注釋的方法中使用

  1. @AfterView
  2. voidinit(){
  3. textView.setText("Hello");
  4. }


這樣就不會有問題了。對於@Click,方法名和xml文件中的id一樣就可以這樣寫,AndroidAnnotations會自動識別,對於

多個Button,可以寫多個@Click,也可以在這樣

  1. @Click({R.id.button1,R.id.button2,R.id.button3})
  2. voidbuttonClicked(Buttonbt){
  3. switch(bt.getId()){
  4. caseR.id.button1://
  5. break;
  6. ...
  7. }
  8. }

其他的一些內容就這裡就不多講,因為內容東西雖不是很多,但也幾乎包含了Android開發所有內容,有興趣的朋友可

以到github自行學習,如有問題、疑問歡迎交流,共同學習。

至於xml文件,還是和之前一樣,沒有變化。

最最最要注意的一點就是:使用AndroidAnnotations千萬要記得,編譯的時候會生成一個子類,這個子類的名稱就是在

原來的類之後加了一個下劃線“_”,比如這個例子產生的子類名稱為“MyActivity_”,這就需要你在注冊這個Activity的時候,在

AndroidManifest.xml中將 MyActivity 改為 MyActivity_ ,使用的時候也是使用MyActivity_來表示此類,如從另一個Activity跳轉

到此節目就要這樣用:

  1. startActivity(newIntent(this,MyActivity_.class));


注意,是MyActivity_.class 不是 MyActivity.class;

 

AndroidAnnotations就介紹到這裡,下面再稍微介紹一下github上的一個大牛Jake Wharton(本博接下來會介紹其一些開源組件)

的類似開源框架:Butter Knife

Butter Knife也是使用注入視圖的方式使開發人員盡可能少的編寫代碼。相比AndroidAnnotations,個人覺得沒有AndroidAnnotations

使用簡單,而且文檔幾乎也沒有。還是先看一小段代碼吧:

  1. packagecom.example.butterknife;
  2.  
  3. importandroid.app.Activity;
  4. importandroid.os.Bundle;
  5. importandroid.widget.Button;
  6. importandroid.widget.ListView;
  7. importandroid.widget.TextView;
  8. importandroid.widget.Toast;
  9. importbutterknife.InjectView;
  10. importbutterknife.OnClick;
  11. importbutterknife.ButterKnife;
  12. importbutterknife.OnItemClick;
  13. importbutterknife.OnLongClick;
  14.  
  15. importstaticandroid.widget.Toast.LENGTH_SHORT;
  16.  
  17. publicclassSimpleActivityextendsActivity{
  18. @InjectView(R.id.title)TextViewtitle;
  19. @InjectView(R.id.subtitle)TextViewsubtitle;
  20. @InjectView(R.id.hello)Buttonhello;
  21. @InjectView(R.id.list_of_things)ListViewlistOfThings;
  22. @InjectView(R.id.footer)TextViewfooter;
  23.  
  24. privateSimpleAdapteradapter;
  25.  
  26. @OnClick(R.id.hello)voidsayHello(){
  27. Toast.makeText(this,"Hello,views!",LENGTH_SHORT).show();
  28. }
  29.  
  30. @OnLongClick(R.id.hello)booleansayGetOffMe(){
  31. Toast.makeText(this,"Letgoofme!",LENGTH_SHORT).show();
  32. returntrue;
  33. }
  34.  
  35. @OverrideprotectedvoidonCreate(BundlesavedInstanceState){
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.simple_activity);
  38. ButterKnife.inject(this);
  39.  
  40. //Contrivedcodetousethe"injected"views.
  41. title.setText("ButterKnife");
  42. subtitle.setText("View\"injection\"forAndroid.");
  43. footer.setText("byJakeWharton");
  44. hello.setText("SayHello");
  45. }
  46. }

總之,兩者雖有相似的地方,但看到AndroidAnnotations之後,就不願使用Butter Knife了。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved