博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Annotations浅析
阅读量:5893 次
发布时间:2019-06-19

本文共 6196 字,大约阅读时间需要 20 分钟。

这阵子遇到了好多事情,挺久没来更新博文了,这两天在学这个开源框架Android Annotations,用起来感觉挺方便的,

相信用过Spring注解的孩子理解起来应该比較easy!

就是配置起来比較吃力。

关于AndroidAnnotaions的介绍,网上已经非常多了,我这里不再累赘。

  1、AndroidAnnotations官网:(或许你须要FQ)

  2、eclipse中使用androidannotations的配置方法说明:

  3、Android Studio中配置AndroidAnnotations:(这个是我这篇博文中要涉及到的!

一、Android Studio配置androidannotations环境。

1、首先你建立一个module之后,在相应的app中会有一个名为build.gradle的文件(该module有效),而在整个项目外面也会有一个名为build.gradle的文件(全局有效)【这个工具中的application的文件夹下(相当于Eclipse下的workspace)是能够有多个module的(相当于Eclipse下的project)】

2、我们配置的时候大概要分为以下两步

在局部build.gradle中(增加红色字体部分):

apply plugin: 'com.android.application'

apply plugin: 'android-apt'
def AAVersion = '3.0.1'
android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"
    defaultConfig {
        applicationId "com.tongbu.mytest"
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    apt "org.androidannotations:androidannotations:$AAVersion"
    compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt {
    arguments {
        androidManifestFile variant.processResources.manifestFile
        resourcePackageName 'com.tongbu.mytest'
    }
}

在全局build.gradle中(增加红色字体部分):

buildscript {

    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.3'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

假设以上的都顺利完毕了。那么恭喜你已经快配置完了,还须要把AndroidManifest.xml中的Activity的名字后面加上 _(下划线),由于这个框架解析编译的时候,比方类MainActivity会被解析成MainActivity_.class。所以在清单文件里我们要在Activity的名字后面加一个下划线。或者androidannotation会报错!

但并不会这么顺利。在你补充完下划线之后。你会发现会提示你找不到MainActivity_这个东东

那么怎么办呢??我们说了它是在编译的时候整出来的。那我们仅仅要按一下编译的按钮就可以生成了!!

这样子androidannotation在android studio上的环境就配置好了。Eclipse的话资料比較多。再这里就不介绍了

二、一个Demo来了解androidannotations的部分注解

@NoTitle  //无标题@Fullscreen //全屏@EActivity(R.layout.activity_my)public class MyActivity extends ActionBarActivity {    //==============================================主要的注解=================================================    @ViewById    Button button1;    @ViewById    Button button2;    @ViewById(R.id.textview1)   //指定id的注入    TextView textView;    @ViewById    ProgressBar progressBar;    @ViewById    ImageView imageView;    //获取系统service的方法(代替原来的clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);)    @SystemService    ClipboardManager clipboardManager;    @Click({R.id.button1,R.id.button2,R.id.button3,R.id.button4})    public void simpleButtonOnClicked(View view){        switch (view.getId()){            case R.id.button1:{                textView.setText("Button1 is Clicked!");            }            break;            case R.id.button2:{                textView.setText("Button2 is Clicked!");            }            break;            case R.id.button3:{                String content = clipboardManager.getText().toString();                Toast.makeText(getApplicationContext(),"剪贴板内容: " + content, Toast.LENGTH_SHORT).show();            }            break;            case R.id.button4:{                Toast.makeText(getApplicationContext(),"滚动栏開始了!",Toast.LENGTH_SHORT).show();                progressBarWorks();            }            break;        }    }    @LongClick({R.id.button2})    public void buttonOnLongClicked(View view){        switch (view.getId()){            case R.id.button1:{                textView.setText("Button1 is LongClicked!");//由于没注冊,所以不可能被触发            }            break;            case R.id.button2:{                textView.setText("Button2 is LongClicked!");//可触发            }            break;        }    }    //===================================================关于资源的注解=========================================    @AnimationRes(R.anim.rotate)    Animation animationRotate;    @DrawableRes(R.drawable.myphoto)    Drawable myphoto;    @ColorRes(R.color.love)    Integer mycolor;    @TextRes(R.string.textres)    CharSequence text;    @Click({R.id.button5,R.id.button6,R.id.button7})    public void animationButtonOnClicked(View view){        switch (view.getId()){            case R.id.button5:{                imageView.startAnimation(animationRotate);            }            break;            case R.id.button6:{                imageView.setImageDrawable(myphoto);            }            break;            case R.id.button7:{                Toast.makeText(getApplicationContext(),text.toString(),Toast.LENGTH_SHORT).show();            }            break;        }    }    //==============================================关于线程的注解================================================    //相当于一个新的任务AsyncTask或者新线程Thread    @Background    public void progressBarWorks(){        //相当于一个新的线程中运行: @Background        int i = 1;        while (i <= 10){            Log.e("progress","进度: " + i);            try {                Thread.sleep(1000);                updateProgressBar(i);                //直接progressBar.setProgress(i);也能够的,所以@Background注解内部可能实现了handler机制                i++;            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    //指代UI线程    @UiThread    public void updateProgressBar(int i){        progressBar.setProgress(i);        if (i == 10){            Toast.makeText(getApplicationContext(), "滚动栏结束",Toast.LENGTH_SHORT).show();        }    }    //=======================================关于几个事件的先后顺序===============================================    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.e("FirstToLast", "onCreate");        //可省略!

//setContentView(R.layout.activity_my); //progressBar.setMax(100); 报错,空指针异常 //由于在onCreate()被调用的时候。@ViewById还没有被set,也就是都为null //所以假设你要对组件进行一定的初始化,那么你要用@AfterViews注解 } @AfterViews public void init(){ Log.e("FirstToLast","init"); progressBar.setMax(10); } @Override protected void onResume() { super.onResume(); Log.e("FirstToLast","onResume"); } @Override protected void onStart() { super.onStart(); Log.e("FirstToLast","onStart"); } }

几个方法的先后调用顺序:

资源涉及的注解(不一一列举):

转载于:https://www.cnblogs.com/clnchanpin/p/6781563.html

你可能感兴趣的文章
有序字典--collection计数器中的orderedict
查看>>
linux虚拟机初始配置
查看>>
线程安全与可重入函数
查看>>
Java-WebSocket
查看>>
电视剧斗破苍穹里面的一句话
查看>>
j2e中操作EXCEL
查看>>
==与equal的区别
查看>>
JavaWeb学习笔记(四)--Tomcat体系结构和软件密码学基础
查看>>
浅谈小白如何读懂Redis高速缓存与持久化并存及主从高可用集群
查看>>
【C#懒蛋编程——5分钟经验分享】03使用Description特性标签,简化查找表编写
查看>>
精密制冷精益求精
查看>>
Ubuntu-18.04 LTS嵌入式linux开发环境搭建
查看>>
增加00-调整JVM内存大小 +++解决MyEclipse编写JSP时候光标来回来跳的问题
查看>>
求职准备:大一到大三,做好五件大事!
查看>>
转载请保留出处:shoru.cnblogs.com 晋哥哥的私房钱
查看>>
Maven IDEA Plugin
查看>>
复制粘贴功能失效
查看>>
挖掘用户需求
查看>>
Win7连接服务器
查看>>
hduoj1091A+B for Input-Output Practice (III)
查看>>