- 一.简介
我们在开发J2EE项目的时候,经常感觉Spring很方便,因此,当我们开发android的时候,自然而然会想有没有类似的框架。本次博客主要讲一下比较流行的android开发框架AndroidAnnotations,它除了有依赖注入的特性以外,还集成了Ormlite,Spring-android中的REST模板。使用起来非常方便,大大提高了开发效率。
二.使用步骤
1.下载AndroidAnnotations:
$ git clone https://github.com/excilys/androidannotations.git
项目中重要的两个jar包分别是:androidannotations-api-3.0.1.jar和androidannotations-3.0.1.jar
2.新建一个android项目,然后将androidannotations-api-3.0.1.jar复制到libs目录下,在项目的根目录新建一个文件夹,命名为compile-libs,然后将androidannotations-3.0.1.jar复制到该目录下
3.然后设置项目属性:右键->Properties->Java Compiler->Annotation Processing 在该页面选中Enable project specific settings。
然后点击Annotation Processing的子项Factory Path页面,选中Enable project specific settings,然后添加编译所需的jar包。点击“Add JARs”将之前complie-libs目录下的androidannotations-3.0.1.jar导入,保存后退出。
首先是布局文件
01.
<?xml version=
"1.0"
encoding=
"utf-8"
?>
02.
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
03.
android:orientation=
"vertical"
04.
android:layout_width=
"fill_parent"
05.
android:layout_height=
"fill_parent"
06.
>
07.
<EditText
08.
android:id=
"@+id/myInput"
09.
android:layout_width=
"fill_parent"
10.
android:layout_height=
"wrap_content"
11.
/>
12.
<Button
13.
android:id=
"@+id/myButton"
14.
android:layout_width=
"fill_parent"
15.
android:layout_height=
"wrap_content"
16.
android:text=
"Click me!"
17.
/>
18.
<TextView
19.
android:id=
"@+id/myTextView"
20.
android:layout_width=
"fill_parent"
21.
android:layout_height=
"wrap_content"
22.
/>
23.
</LinearLayout>
上述布局文件和普通项目的布局文件没有什么差别,下面我们看一下对应的Activity的java文件01.
package
com.example.testaa;
02.
03.
import
org.androidannotations.annotations.AfterViews;
04.
import
org.androidannotations.annotations.Click;
05.
import
org.androidannotations.annotations.EActivity;
06.
import
org.androidannotations.annotations.UiThread;
07.
import
org.androidannotations.annotations.ViewById;
08.
09.
import
android.app.Activity;
10.
import
android.content.Intent;
11.
import
android.widget.Button;
12.
import
android.widget.EditText;
13.
import
android.widget.TextView;
14.
import
android.widget.Toast;
15.
@EActivity
(R.layout.activity_main)
16.
public
class
MainActivity
extends
Activity {
17.
@ViewById
(R.id.myInput)
18.
EditText myEditText;
19.
20.
@ViewById
21.
Button myButton;
22.
23.
@ViewById
24.
TextView myTextView;
25.
/**
26.
* 加载完View之后进行的处理
27.
*/
28.
@AfterViews
29.
void
afterViewProcess(){
30.
myButton.setText(
"Next"
);
31.
myTextView.setText(
"第一个Activity页面"
);
32.
}
33.
34.
/**
35.
* 绑定点击事件
36.
*/
37.
@Click
(R.id.myButton)
38.
void
processClick(){
39.
Intent intent=
new
Intent(
this
,SubActivity_.
class
);
40.
intent.putExtra(
"input_value"
, myEditText.getEditableText().toString());
41.
startActivity(intent);
42.
}
43.
44.
/**
45.
* 利用UI线程显示一个Toast
46.
* @param content
47.
*/
48.
@UiThread
49.
void
showToast(String content){
50.
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
51.
}
52.
/**
53.
* 延时显示
54.
* @param content
55.
*/
56.
@UiThread
(delay=
1000
)
57.
void
showToastDelay(String content){
58.
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
59.
}
60.
}
可以看出,我们通过注解的方式,大大简化了原有的代码。注解1:@ViewById 与findViewById功能相似,如果ViewById后没有设置资源ID的话,就是自动查找与变量名称相同的id资源。
注解2:@Click 点击事件处理的注解。
注解3:@UiThread 后台Ui线程的注解,省去了Handler等等。
注解4:@EActivity 提示Activity的注解,注意,该注解将Activity编译成Activity_,注意,多一个下划线“_”,因此在AndroidManifest.xml文件中需要将其添加下滑线
注解5:@AfterViews 是指View类注入完毕之后执行的代码。
我们第二个页面的布局文件与第一个相同,我们主要看一下它的java文件
01.
/*
02.
* $filename: SubActivity.java,v $
03.
* $Date: 2014-4-15 $
04.
* Copyright (C) ZhengHaibo, Inc. All rights reserved.
05.
* This software is Made by Zhenghaibo.
06.
*/
07.
package
com.example.testaa;
08.
09.
import
org.androidannotations.annotations.AfterViews;
10.
import
org.androidannotations.annotations.Click;
11.
import
org.androidannotations.annotations.EActivity;
12.
import
org.androidannotations.annotations.Extra;
13.
import
org.androidannotations.annotations.UiThread;
14.
import
org.androidannotations.annotations.ViewById;
15.
16.
import
android.app.Activity;
17.
import
android.widget.Button;
18.
import
android.widget.EditText;
19.
import
android.widget.TextView;
20.
import
android.widget.Toast;
21.
28.
@EActivity
(R.layout.activity_sub)
29.
public
class
SubActivity
extends
Activity{
30.
@ViewById
(R.id.myInput)
31.
EditText myEditText;
32.
33.
@ViewById
34.
Button myButton;
35.
36.
@ViewById
37.
TextView myTextView;
38.
39.
@Extra
(value=
"input_value"
)
40.
String inputString;
41.
42.
@AfterViews
43.
void
afterViewProcess(){
44.
myTextView.setText(inputString);
45.
}
46.
47.
@Click
(R.id.myButton)
48.
void
processClick(){
49.
showToast(
"Clicked me !"
);
50.
}
51.
52.
@UiThread
53.
void
showToast(String content){
54.
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
55.
}
56.
}
这里面多一个@Extra注解,这个注解的含义和getIntent().getExtra()相同,目的是获取上一个Activity通过Intent传递过来的值。下面是AndroidManifest.xml文件
01.
<?xml version=
"1.0"
encoding=
"utf-8"
?>
02.
<manifest xmlns:android=
"http://schemas.android.com/apk/res/android"
03.
package
=
"com.example.testaa"
04.
android:versionCode=
"1"
05.
android:versionName=
"1.0"
>
06.
07.
<uses-sdk
08.
android:minSdkVersion=
"8"
09.
android:targetSdkVersion=
"17"
/>
10.
11.
<application
12.
android:allowBackup=
"true"
13.
android:icon=
"@drawable/ic_launcher"
14.
android:label=
"@string/app_name"
15.
android:theme=
"@style/AppTheme"
>
16.
<activity
17.
android:name=
"com.example.testaa.MainActivity_"
18.
android:label=
"@string/app_name"
>
19.
<intent-filter>
20.
<action android:name=
"android.intent.action.MAIN"
/>
21.
22.
<category android:name=
"android.intent.category.LAUNCHER"
/>
23.
</intent-filter>
24.
</activity>
25.
<activity
26.
android:name=
"com.example.testaa.SubActivity_"
></activity>
27.
</application>
28.
29.
</manifest>
注意Activity的声明,多添加了下划线“_”框架的其他注解:https://github.com/excilys/androidannotations/wiki/AvailableAnnotations
-
该文章引用别人的博客 :http://www.it165.net/pro/html/201404/12213.html