Android註解框架Annotations從配置到應用
Android Annotations配置
1.首先,一個框架需要有它的依賴包,Annotations框架需要使用兩個jar包,我已經上傳在了我的資源上,點此下載2.在新建的普通專案裡面,新建一個compile-libs資料夾,將下載來的androidannotation-xx.jar新增到compile-libs資料夾下,將androidannotation-api-xx.jar新增到libs資料夾下
3.新增完依賴包之後,還要為其配置,在Project的build.gradle下的dependencies節點新增:
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4',如圖:
4.在Moudle的build.gradle下新增:
apply節點下:
apply plugin: 'android-apt'
def AAVersion = '3.2+'
-----------------------------------------------------------------------------
dependencies節點下:
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
compile 'com.android.support:support-v4:23.4.0'
------------------------------------------------------------------------------
新增一段apt:
apt {
arguments {
androidManifestFile variant.outputs[0].processResources.manifestFile
resourcePackageName 'com.example.zjy.myapplication'
}
}
如圖:
5.以上完成了基本的搭建,接下來還需要注意一點,AndroidAnnotations框架有一個特點,就是在編譯時會將我們的元件名後面加上一個下劃線,比如MainActivity就變為MainActivity_.class,所以如果我們要通過這個框架來進行開發,那需要在使用這些元件的時候都遵循這種規範,如圖,在AndroidMainfest.xml檔案中:
6.但是新增完之後你會發現專案報錯,識別不到xxxActivity_這個類名,那是因為還沒有編譯,需要將專案進行編譯,點選工具欄中的編譯按鈕(就圖案是010101,在選單欄Build下方的那個按鈕):
執行專案若報錯:
com.android.builder.packaging.duplicateFileException
則根據所指的重複檔案的路徑,將在build.gradle檔案的android節點中新增:
packagingOptions {
exclude 'META-INF/maven/org.androidannotations/androidannotations-api/pom.xml'
exclude 'META-INF/maven/org.androidannotations/androidannotations-api/pom.properties'
exclude 'androidannotations-api.properties'
}
再次執行,完美通過。
Android Annotations應用
AndroidAnnotations的基本應用:
[email protected](R.id.xxx)
這是最為基本的一個註解,表示該類是一個Activity,並且對應於哪個佈局檔案@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
}
可以看到,我們沒有了onCreate方法,也沒有了setContentView方法,依然能夠執行出界面。
[email protected](R.id.xxx)
作用:相當於findViewById(R.id.xxx)。在佈局檔案中定義一個按鈕:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
>
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
在Activity中通過註解宣告該按鈕,注意按鈕要宣告為public不能為private:
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
@ViewById(R.id.btn)
public Button btn;
}
[email protected](R.id.xxx)
作用:為該按鈕註冊監聽事件,表明該方法為該按鈕的點選事件方法@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
@ViewById(R.id.btn)
public Button btn;
@Click(R.id.btn)
void myClick(){
Toast.makeText(this,"AndroidAnnotations",Toast.LENGTH_SHORT).show();
}
}
還可以對多個button進行註解,再通過switch進行判斷:
@Click({R.id.button1,R.id.button2,R.id.button3})
void buttonClicked(Button btn){
switch(btn.getId()){
case R.id.button1:
//這裡實現button1的點選事件
break;
...
}
}
[email protected]
作用:只有所有View都注入完畢之後,才會執行該註解的方法,一般進行一些初始化的操作@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
@ViewById(R.id.btn)
public Button btn;
@Click(R.id.btn)
void myClick(){
Toast.makeText(this,"AndroidAnnotations",Toast.LENGTH_SHORT).show();
}
@AfterViews
void init(){
btn.setText("按鈕注入完畢後才執行此方法");
}
}
[email protected](String params)
作用:獲得其它地方跳轉過來時所傳遞過來的資料,括號中的字串即為傳遞過來的資料的key如下例子:
MainActivity中:
Intent intent = new Intent(MainActivity.this,SecondActivity_.class);
Bundle bundle = new Bundle();
bundle.putString("hello","hello");
intent.putExtras(bundle);
startActivity(intent);
SecondActivity:
@EActivity(R.layout.activity_second)
public class SecondActivity extends Activity{
@Extra("hello")
String params;
@AfterViews
void init(){
Toast.makeText(this,params,Toast.LENGTH_SHORT).show();
}
}
跳轉的時候注意加下劃線:
Intent intent = new Intent(MainActivity.this,SecondActivity_.class);
startActivity(intent);
[email protected]和@UiThread
@Background作用:相當於用來進行後臺操作的方法(比如請求網路資源,操作檔案等等),被Backgroung註解的方法裡面不能進行任何UI操作,否則會報錯。@Background
void httprequest(){
//進行http操作
//操作資料庫
//操作檔案
}
@UiThread作用:相當於用來進行UI控制元件的操作,被UiThread註解的方法裡面不能進行任何後臺操作,否則會報錯
@UiThread
void runinUI(){
Toast.makeText(this,"AndroidAnnotations",Toast.LENGTH_SHORT).show();
}
如何將兩者結合使用:
@AfterViews
void init(){
httprequest();
}
@Background
void httprequest(){
//進行http操作
//操作資料庫
//操作檔案
//執行完後臺操作之後再執行UI操作
runinUI();
}
@UiThread
void runinUI(){
Toast.makeText(this,"UiThread",Toast.LENGTH_SHORT).show();
}
[email protected]
作用:用來標識該類是一個Fragment,並對應哪個佈局檔案@EFragment(R.layout.layout_myfragment)
public class MyFragment extends Fragment{
}
[email protected]
作用:用來給當前Fragment接收別的地方傳來的資料MainActivity中:
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
@ViewById(R.id.btn)
public Button btn;
@Click(R.id.btn)
void myClick(){
MyFragment fragment = new MyFragment_();
Bundle bundle = new Bundle();
bundle.putString("hello","...");
//設定傳遞的引數
fragment.setArguments(bundle);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.content, fragment);
transaction.commit();
}
}
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
</LinearLayout>
MyFragment類:
@EFragment(R.layout.layout_myfragment)
public class MyFragment extends Fragment{
@FragmentArg("hello")
String params;
@AfterViews
void init(){
Toast.makeText(getActivity(), params, Toast.LENGTH_SHORT).show();
}
}
layout_myfragment.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</LinearLayout>
注意:FragmentArg括號中的引數要跟bundle所裝載的資料的key一致,才能接受到傳過來的資料。
以上介紹了比較常用的幾種註解,Annotaions框架還提供了很多其他的註解,如下:
@AfterInject 定義的方法在類的構造方法執行後執行
@AfterTextChange定義的方法在TextView及其子類的Text屬性改變後執行
@BeforeTextChange 定義的方法在TextView及其子類的Text屬性改變前執行
@EProvider 在 ContentProvider中啟用Annotations
@EReceive 在BroadcastReceiver中啟用Annotations
@EService 在Service中啟用Annotations
@EView 在自定義的View的子類中啟用Annotations
......等等,有興趣的朋友可以去看Annotations的官方API文件
總結:Annotations確實為我們的開發帶了許多方便,特別是在大型的專案下,不再需要一遍遍的findViewById,不再需要一遍遍地setContentView,同時另一方面又提高了程式碼的簡潔度和可讀性,所以相信其運用到實際開發中是非常有幫助的。
相關推薦
Android註解框架Annotations從配置到應用
最近在看一個新的基於註解開發的專案,瞭解到Android中同樣存在一些註解框架,能夠大大提高我們的編碼規範和效率,減少程式碼量。本文主要分為兩部分,針對較熱門的註解框架Android Annotati
【Android】影象濾鏡框架GPUImage從配置到應用
GPUImage簡介 GPUImage 是iOS下一個開源的基於GPU的影象處理庫,提供各種各樣的影象處理濾鏡,並且支援照相機和攝像機的實時濾鏡。GPUImage for Android是它在Android下的實現,同樣也是開源的。其中提供了幾十多種常見的圖片濾鏡API,且
android多框架實現短視訊應用、3D手勢旋轉、banner控制元件、指南針、智慧管家等應用原始碼
Android精選原始碼 android智慧管家app原始碼 Android高仿拼多多分類列表 Android百度地圖例項詳解之仿摩拜單車APP RecyclerView的LayoutManager搭建流式佈局 Android自定義View分享——一個圓形
android註解框架ButterKnife學習
最近學習了一個註解框架ButterKnife。地址:http://jakewharton.github.io/butterknife/,https://github.com/JakeWharton/butterknife/ 不同於其他的註解框架通過反射在程式碼執行階段實現對View的賦值和設
註解框架AndroidAnnotations4.5.2在android Studio 3.0之後的配置
注意:這是android Studio 3.0之後的配置(關於 android studio 即可檢視版本) 在module的build.gradle中根據以下紅色字型來進行配置 第一步:1.新增下面這一段到defaultConfig下面 javaCompileOp
Android Studio3.0 配置AndroidAnnotation註解框架
前言android學習了一段時間後,想要開發一款App,但是一些複雜的程式碼寫多了實在麻煩,就到網上找了找簡便的方法,於是在眾多的註解開發框架中,找到了Android Annotation這個框架,這裡
遊戲UI框架設計(五): 配置管理與應用
oid per b- 測試 中心 序列化對象 ner stun sage 遊戲UI框架設計(五) --配置管理與應用 在開發企業級遊戲/VR/AR產品時候,我們總是希望可以總結出一些通用的技術體系,框架結構等,為簡化我們的開發起到“四兩撥千金”的作用。所謂“配
理解Android的handler機制--從應用到原理再到實踐
關於Android的多執行緒機制,面試的時候總是問到,今天專門寫這個部落格,目的是把handler說清楚。 分別從下面四個方向說清楚。 由來 問題:為什麼有handler? 我們知道java是支援多執行緒的,而一個APP只有一個UI(即螢幕只有一個),如果每個執行緒
Tomcat(一) Tomcat是什麼:Tomcat與Java技術 Tomcat與Web應用 以及 Tomcat基本框架及相關配置
轉載自:http://blog.csdn.net/tjiyu/article/details/54590259 Tomcat(一) Tomcat是什麼: Tomcat與Java技術 Tomcat與Web應用 以及 Tomcat基本框架及相關配置 &nb
Android 自己打造IOC註解框架
Android中IOC框架就是注入控制元件和佈局或者說是設定點選監聽,網上有很多成熟的註解框架例如xUtils,afinal,butterknife等等。你可能會問,既然已經有好的框架為何還要造輪子?因為,首先我是學習,學習框架的設計以及實現,其次是拓展,適合自己的輪子才是好輪子,所以我
詳解Spring框架註解掃描開啟之配置細節
今天通過做的一個結合ssh的crm專案,最後用到了spring註解配置,最後需要開啟配置,查找了很長時間,找了一篇比較有質量的部落格文章,就轉載過來,希望能夠給與大家一定幫助,另外也希望博主的文章有更多的人看到。 原文地址:https://blog.csdn.net/u014427391/art
Android-volley淺談-從原始碼去了解它為什麼是Google推薦的網路請求框架
今天想總結的是Volley這個網路請求框架,雖然volley論火爆程度比不上okhttp和retrofit 這兩個,並且在日常使用的過程中可能很少有人能去深究為什麼volley是Google 所推薦的網路框架,不管從使用還是從原始碼去理解,我覺得volley都是一款值得去深究
關於Android App上線後從應用市場點選開啟按鈕進入應用後進行操作後,再點選home鍵到桌面後點擊啟動圖示重新開啟應用的解決方法
如題所述,重新開啟應用夠噁心的了,讓人更噁心的是點選返回鍵退出後,上次點選home鍵之前的那個介面又跳出來,讓人哭笑不得,經過搜尋找到解決辦法,最後記錄在此 在應用啟動的第一個介面的onCreate方法的super.onCreate(savedInstanceState);之後呼叫下面方法
Android ORM 框架之 Android中ORMLite應用基礎
ORMLite是常用的一個ORM框架,她不止可以用在Android的sqlite資料庫,也可以使用她操作其他常見的資料庫。這兒是根據官方文件抽取來的android用法。 一,新增依賴 匯入ormlite-core.jar和ormlite-android.
Android UI註解框架 ButterKnife原始碼及原理分析
很開心,今天看到了一篇大神寫的部落格,對ButterKnife進行原始碼原理分析!看完之後學習到了很多新的知識,有關於自動生成程式碼的原理,以後有機會要自己寫一個註解框架!哈哈,如果能力夠的話! 簡單介紹一下 ButterKnife是一個很不錯的View
Android Studio上方便使用butterknife註解框架的偷懶外掛Android Butterknife Zelezny
首先提下ButterKnifey已經更新到版本7.0.1了,現在註解已經不叫@InjectView了,而叫@Bind,感覺更貼合語義。同時註冊的方式也從 ButterKnife.inject(this); 變成了 ButterKnife.bind(this); 關於
Android面試題-註解框架實現原理
本文配套視訊 配套視訊 原始碼分析相關面試題 與XMPP相關面試題 與效能優化相關面試題 與登入相關面試題 註解框架實現原理,手寫ButterKnife實現自己的註解框架 初級程式設計師使用別人的框架,中級程式設
cocos2dx 3.12在android studio上從配置到真機執行
官網的配置連結: 好吧,有人肯定說著官網不是有很好的配置文件嗎,照著弄不就好了,要你何用?曾幾何時我也像這麼單純,然後就是各種悲劇,配置過程中出現了不少問題,導致走了很多彎路,這裡主要就是把其中遇到的彎路備份下來,免得下次配置的時候又出現同樣的問題。 首先是Ja
Spring4.X + Spring MVC + Mybatis3 零配置應用開發框架搭建詳解 (3)
Spring4.X + Spring MVC + Mybatis3 零配置應用開發框架搭建詳解(3) - 實現最基本的登入處理 1. 基本架構: 基礎框架搭建完成後,我們開始進行Spring + SpringMVC + Mybatis的整合,來完成登入功能的
android如何從一個應用跳轉到另一個頁面
眾所周知,在一個APP內部,從一個頁面跳轉到另外一個頁面是使用startactivity函式來實現的。 同樣的,對於應用之間的跳轉也是如此的。應用直接的跳轉分為三種情況,為了方便描述,我加上有兩個應用A和B,需求是要從A點選一個按鈕,可以跳轉到B,同時A要傳資料給B,B能夠