androidannotation 是github上的一个开源项目。

主要是注解机制,可以改善android写代码的效率。

Activity 使用

1.@EActivity 注解

可想而知,service,broadcastreceiver等都有相应的注解。

package com.joyfulmath.myannnotationsample.activity;

import android.app.Activity;
import com.joyfulmath.myannnotationsample.R;
import com.joyfulmath.myannnotationsample.fragment.EFragmentSampleFragment;
import com.joyfulmath.myannnotationsample.utils.TraceLog; import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.FragmentById;
import org.androidannotations.annotations.Receiver; @EActivity(R.layout.activity_eactivity_sample)
public class EActivitySampleActivity extends Activity { @FragmentById(R.id.myFragemnt)
EFragmentSampleFragment eFragmentSampleFragment; @Receiver(actions = EFragmentSampleFragment.ACTION)
void myReceiver()
{
TraceLog.i("receive:"+EFragmentSampleFragment.ACTION);
}
}

一个典型的Activity如上注解。R.layout.activity_eactivity_sample

这个layout表示,该activity讲加载这个layout,等同于在oncreate中setcontent一样。

@FragmentById 是fragment的注解,后面会讲到。

@Receiver使用的是 监听广播。比起老的写法,大大简化。

2.@EFragment

package com.joyfulmath.myannnotationsample.fragment;

import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.widget.TextView; import com.joyfulmath.myannnotationsample.R;
import com.joyfulmath.myannnotationsample.utils.TraceLog;
import com.joyfulmath.myannnotationsample.view.EViewSampleView; import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.RootContext;
import org.androidannotations.annotations.ViewById; /**
* Created by deman on 2015/11/5.
*/
@EFragment(R.layout.fragment_efragment_sample)
public class EFragmentSampleFragment extends BaseFragment { public final static String ACTION = "efagment.samplefragment.action"; @ViewById(R.id.textFragmentView)
TextView textView; @ViewById(R.id.eViewSample)
EViewSampleView eViewSampleView; @Click(R.id.textFragmentView)
void sendBroadCast()
{
eViewSampleView.setVisibility(View.VISIBLE);
eViewSampleView.setSpannableText("custom define text");
doBackground();
} @Background
void doBackground()
{
TraceLog.i("sendBroadCast");
getActivity().sendBroadcast(new Intent(ACTION));
}
}

与activity类似,@EFragment 后面也是带一个layout,来表示这个fragment的布局。

里面的布局元素,使用也是非常简单:

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

这句话的意思就是,在适当的时候把

textView = ((TextView) hasViews.findViewById(com.joyfulmath.myannnotationsample.R.id.textFragmentView));

在\app\build\generated\source\apt\debug\com\joyfulmath\myannnotationsample\fragment

下面会生成类+“_”.

这个类才是实际真正运行的类。

当然要运用fragment,和老的写法是一致的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.joyfulmath.myannnotationsample.activity.EActivitySampleActivity">
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myFragemnt"
class="com.joyfulmath.myannnotationsample.fragment.EFragmentSampleFragment_"
/>
</RelativeLayout>

3.Custom Class

这个写法更加简单:@EBean

用这个修饰词,表示class的构造只有默认,以及带context参数的2种结构。

在其他地方使用这个calss的时候,使用@Bean注解。

@EBean
public class NotificationMgr { @SystemService
NotificationManager notificationManager; @RootContext
Context context;

看到@RootContext 是构造函数用的context。

看使用的地方,debug里面可以看到:

notificationMgr = NotificationMgr_.getInstance_(this);//this  就是当前activity

4.custom view

自定义view的关键是2点:

@EView关键字

构造函数如下:

@EView
public class EViewSampleView extends TextView { public EViewSampleView(Context context,AttributeSet attributes)
{
super(context,attributes);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
} public void setSpannableText(CharSequence text)
{
TraceLog.i(text.toString());
SpannableString spannableString = new SpannableString(text);
spannableString.setSpan(new ForegroundColorSpan(Color.GREEN),1,spannableString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
setText(spannableString);
}
}

其他就和自定义view一样了。

参考:

https://github.com/excilys/androidannotations/wiki/Cookbook

androidannotation study(1)---Activity, Fragment,Custom Class & Custom View的更多相关文章

  1. 适配器(adapter)与fragment之间、fragment与activity之间的通信问题

    一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...

  2. Android开发教程 - 使用Data Binding(四)在Fragment中的使用

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  3. 【转】 Pro Android学习笔记(三八):Fragment(3):基础小例子-续

    目录(?)[-] Step 2实现Fragment指定调用类TitleFragment onInflate和onAttach onCreate和onCreateView onActivityCreat ...

  4. Android之Activity系列总结(一)--Activity概览

    Activity 本文内容 创建 Activity 实现用户界面 在清单文件中声明 Activity 启动 Activity 启动 Activity 以获得结果 结束 Activity 管理 Acti ...

  5. Android基础总结(六)Activity

    创建第二个Activity(掌握) 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <ac ...

  6. android源码解析(十七)-->Activity布局加载流程

    版权声明:本文为博主原创文章,未经博主允许不得转载. 好吧,终于要开始讲讲Activity的布局加载流程了,大家都知道在Android体系中Activity扮演了一个界面展示的角色,这也是它与andr ...

  7. ViewPager 详解(五)-----使用Fragment实现ViewPager滑动

    前言:前几篇文章讲解了ViewPager的普通实现方法,但Android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇<ViewPager 详 ...

  8. 02Android用户界面优化之(一)Android Fragment

    一.使用Fragment 1.AndroidManifest.xml文件 <?xml version="1.0" encoding="utf-8"?> ...

  9. Android四大组件全然解析(一)---Activity

    本文參考\android\android\frameworks\base\core\java\android\app\Activity.java文件里的类凝视.以及android/frameworks ...

随机推荐

  1. vs2010安装和使用

    vs2010是之前我跟老师做网站项目时安装的,这次软件工程作业我就用它了,安装过程中的截图就不存在了,我就详细说说它的使用吧. VS2010软件挺大的,下载大概要一个多小时,安装过程大概都是下一步. ...

  2. iOS- 微信支付 (服务器调起支付 )以及回调不成功的原因 不看后悔

    写的不错,给留个言哈... 一. 支付准备工作 1. 微信相关准备工作 (1) 向微信官方开通支付功能. 这个不是前端的工作. (2) 导入官方下载的微信支付SDK包. 我用的是微信开放平台下载的SD ...

  3. ASP.NET跨服务器上传文件的相关解决方案

    第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...

  4. Sprint2演示分

    团队贡献分: 朱杰:22 蔡京航:21 华子仪:20 甄增文:17

  5. Qt Style Sheet实践(一):按钮及关联菜单

    导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...

  6. Node.js爬虫数据抓取 -- 问题总结

    一  返回的信息提示  Something went wrong  request模块请求出现未知错误 其中,所用代码如下(无User-Agent部分) 问题多次派查无果,包括: 1:postman请 ...

  7. [转]easyui datagrid 批量编辑和提交

    web前台主要代码: <script type="text/javascript"> $(function() { var $dg = $("#dg" ...

  8. Asp.Net中动态页面转静态页面

    关于在Asp.Net中动态页面转静态页面的方法网上比较多.结合实际的需求,我在网上找了一些源代码,并作修改.现在把修改后的代码以及说明写一下. 一个是一个页面转换的类,该类通过静态函数Changfil ...

  9. YAML初探

    http://www.cnblogs.com/chwkai/archive/2009/03/01/249924.html 1 概念YAML是一种人们可以轻松阅读的数据序列化格式,并且它非常适合对动态编 ...

  10. C# on Visual Studio Code

    installation Download .NET Core SDK installer and install it. https://www.microsoft.com/net/download ...