Android开发框架androidannotations使用初步

一.简介
我们在开发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导入,保存后退出。


4.下面我们就看一下如下代码

首先是布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText  
        android:id="@+id/myInput"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        />
    <Button  
        android:id="@+id/myButton"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Click me!"
        />
    <TextView  
        android:id="@+id/myTextView"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        />    
</LinearLayout>

上述布局文件和普通项目的布局文件没有什么差别,下面我们看一下对应的Activity的java文件

package com.example.testaa;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;

import android.app.Activity;
import android.content.Intent;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
	@ViewById(R.id.myInput)
	EditText myEditText;
	
	@ViewById
	Button myButton;
	
	@ViewById
	TextView myTextView;
	/**
	 * 加载完View之后进行的处理
	 */
	@AfterViews
	void afterViewProcess(){
		myButton.setText("Next");
		myTextView.setText("第一个Activity页面");
	}
	
	/**
	 * 绑定点击事件
	 */
	@Click(R.id.myButton)
	void processClick(){
		Intent intent=new Intent(this,SubActivity_.class);
		intent.putExtra("input_value", myEditText.getEditableText().toString());
		startActivity(intent);
	}
	
	/**
	 * 利用UI线程显示一个Toast
	 * @param content
	 */
	@UiThread
	void showToast(String content){
		Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
	}
	/**
	 * 延时显示
	 * @param content
	 */
	@UiThread(delay=1000)
	void showToastDelay(String content){
		Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
	}
}

可以看出,我们通过注解的方式,大大简化了原有的代码。

注解1:@ViewById 与findViewById功能相似,如果ViewById后没有设置资源ID的话,就是自动查找与变量名称相同的id资源。

注解2:@Click 点击事件处理的注解。

注解3:@UiThread 后台Ui线程的注解,省去了Handler等等。

注解4:@EActivity 提示Activity的注解,注意,该注解将Activity编译成Activity_,注意,多一个下划线“_”,因此在AndroidManifest.xml文件中需要将其添加下滑线

注解5:@AfterViews 是指View类注入完毕之后执行的代码。


我们第二个页面的布局文件与第一个相同,我们主要看一下它的java文件

/*
 * $filename: SubActivity.java,v $
 * $Date: 2014-4-15  $
 * Copyright (C) ZhengHaibo, Inc. All rights reserved.
 * This software is Made by Zhenghaibo.
 */
package com.example.testaa;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;

import android.app.Activity;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/*
 *@author: ZhengHaibo  
 *web:     http://blog.csdn.net/nuptboyzhb
 *mail:    [email protected]
 *2014-4-15  Nanjing,njupt,China
 */
@EActivity(R.layout.activity_sub)
public class SubActivity extends Activity{
	@ViewById(R.id.myInput)
	EditText myEditText;
	
	@ViewById
	Button myButton;
	
	@ViewById
	TextView myTextView;
	
	@Extra(value="input_value")
	String inputString;
	
	@AfterViews
	void afterViewProcess(){
		myTextView.setText(inputString);
	}
	
	@Click(R.id.myButton)
	void processClick(){
		showToast("Clicked me !");
	}
	
	@UiThread
	void showToast(String content){
		Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
	}
}

这里面多一个@Extra注解,这个注解的含义和getIntent().getExtra()相同,目的是获取上一个Activity通过Intent传递过来的值。

下面是AndroidManifest.xml文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testaa"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.testaa.MainActivity_"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.testaa.SubActivity_"></activity>
    </application>

</manifest>

注意Activity的声明,多添加了下划线“_”

整个项目下载地址:http://download.csdn.net/detail/nuptboyzhb/7199005

框架的其他注解:https://github.com/excilys/androidannotations/wiki/AvailableAnnotations


Android开发框架androidannotations使用初步,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。