Android第三方注解框架Annotations和butterknife

使用注解,可以帮我们去实现一些简单而重复的工作,使得开发效率得到有效提升,免去不必要的时间花费。像findViewById,既可以省时间,也省去了代码量。

AndroidAnnotations

AndroidAnnotations是一个开源的注解框架,可以加快Android开发。通过它,让你专注于你真正重要的。通过简化你的代码,更有利于它的维护。

主 页: http://androidannotations.org/
Github 主页: https://github.com/excilys/androidannotations

一.配置开发环境

此配置为Android studio的配置

projectbuild.gradle文件中,添加以下部分
这里写图片描述

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        mavenCentral() //添加的部分
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' //添加依赖
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

//添加的部分---------->>
repositories {
    mavenCentral()
    mavenLocal()
}
// <<----------------

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

在需要用到此框架的modulebuild.gradle文件中,添加以下部分
这里写图片描述

apply plugin: 'com.android.application'
apply plugin: 'android-apt' //添加的部分
def AAVersion = '3.3.2' //添加的部分,自定义了一个变量“版本号”
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.ql.annotationsdemo"
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
    apt "org.androidannotations:androidannotations:$AAVersion" //添加依赖
    compile "org.androidannotations:androidannotations-api:$AAVersion" //添加依赖
    compile 'com.jakewharton:butterknife:5.1.1'
}

//添加的部分------------->>>
apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile
        // if you have multiple outputs (when using splits), you may want to have other index than 0

        // you should set your package name here if you are using different application IDs
        // resourcePackageName "your.package.name"

        // You can set optional annotation processing options here, like these commented options:
        // logLevel 'INFO'
        // logFile '/var/log/aa.log'
    }
}
// <<<-------------------

成功后即可在代码中使用
这里写图片描述

二.常用标签

 标签   |   等同于

@EActivity setContentView 绑定布局视图
@ViewById findViewById
@Click setOnClickListener 单击事件
@Extra intent.getExtra 活动之间的intent传值
@AfterViews View初始化完成
@ItemClick ListView Item单击事件
@ItemLongClick ListView Item长按事件
@Background 后台运行
@UIThread 前台运行

三.注意:

1.AndroidManifest.xml中注册的activity要在原类名后追加下划线“_”
2.使用注解的控件和方法不能使用private修饰符
3.使用 @Click @ItemClick @ItemLongClick标签必须指明ID
4.控件设置初始值要在生命周期的onResume()方法中或者使用@AfterViews标签
5.使用@EActivity标签绑定布局视图必须要在class的外面(跟import同一级)

四.示例

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

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

@EActivity(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {

    public static final String EXTRA_KEY_NAME = "name";
    public static final String EXTRA_KEY_AGE = "age";

    @ViewById(R.id.textView)
    TextView textView;

    @ViewById
    TextView textView2;

    @Click(R.id.button)
    public void doSomething() {
        Intent intent = new Intent(this, BActivity_.class);
        intent.putExtra(EXTRA_KEY_NAME, "zhangsan");
        intent.putExtra(EXTRA_KEY_AGE, 16);
        startActivity(intent);
    }

    @Override
    protected void onResume() {
        super.onResume();
    //设置值方式1
//  textView.setText("this is from annotation");
    }

    //设置值方式2
    @AfterViews
    public void setcontent(){
        textView.setText("this is from annotation");
        textView2.setText("this is textview2");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
}

BActivity.java

@EActivity(R.layout.activity_b)
public class BActivity extends Activity {

    @Extra(MainActivity.EXTRA_KEY_NAME)
    String name;

    @Extra(MainActivity.EXTRA_KEY_AGE)
    int age;

    @ViewById
    TextView tv_name;
    @ViewById
    TextView tv_age;

    @Override
    protected void onResume() {
        super.onResume();
        tv_name.setText(name);
        tv_age.setText(age + "");
    }
}

butterknife

相比于AndroidAnnotations,功能更少,使用却比较方便,用于做findViewById工作。

1.使用步骤

1.添加依赖
在需要用到的module中的build.gradle文件中

compile 'com.jakewharton:butterknife:5.1.1'


这里写图片描述

2.安装插件
选择在线安装,安装完成重启一下
这里写图片描述

3.使用
在活动中将布局单词选中或者将光标置于单词中,鼠标右键选择Generate。或者使用键盘Alt + insert。会看到Generate butterknife injections这一项。点击确定,即可列出布局文件中所有带ID的控件
这里写图片描述
这里写图片描述

4.示例
这里写图片描述

5.注意
布局文件中的控件必须要指定ID,才会将其显示列出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值