androidannotation study(1)---Activity, Fragment,Custom Class & Custom View
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的更多相关文章
- 适配器(adapter)与fragment之间、fragment与activity之间的通信问题
一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...
- Android开发教程 - 使用Data Binding(四)在Fragment中的使用
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
- 【转】 Pro Android学习笔记(三八):Fragment(3):基础小例子-续
目录(?)[-] Step 2实现Fragment指定调用类TitleFragment onInflate和onAttach onCreate和onCreateView onActivityCreat ...
- Android之Activity系列总结(一)--Activity概览
Activity 本文内容 创建 Activity 实现用户界面 在清单文件中声明 Activity 启动 Activity 启动 Activity 以获得结果 结束 Activity 管理 Acti ...
- Android基础总结(六)Activity
创建第二个Activity(掌握) 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <ac ...
- android源码解析(十七)-->Activity布局加载流程
版权声明:本文为博主原创文章,未经博主允许不得转载. 好吧,终于要开始讲讲Activity的布局加载流程了,大家都知道在Android体系中Activity扮演了一个界面展示的角色,这也是它与andr ...
- ViewPager 详解(五)-----使用Fragment实现ViewPager滑动
前言:前几篇文章讲解了ViewPager的普通实现方法,但Android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇<ViewPager 详 ...
- 02Android用户界面优化之(一)Android Fragment
一.使用Fragment 1.AndroidManifest.xml文件 <?xml version="1.0" encoding="utf-8"?> ...
- Android四大组件全然解析(一)---Activity
本文參考\android\android\frameworks\base\core\java\android\app\Activity.java文件里的类凝视.以及android/frameworks ...
随机推荐
- jqGrid动态列
HTML代码: <div id="divList"> <div class="toolbar"> </div> <ta ...
- 整理的有用的一些EF的CommonDAL小封装
CommonDAL封装: using System; using System.Collections.Generic; using System.Data.Entity; using System. ...
- java俄罗斯方块游戏代码
java俄罗斯方块游戏代码: package com; import java.awt.Color; import java.awt.Graphics; import java.awt.event.K ...
- [CLR via C#]17. 委托
回调函数是一种非常有用的编程机制,它已经存在很多年了.Microsoft .NET Framework通过委托(delegate)来提供一种回调机制.不同于其他平台(比如非托管C++)的回调机 ...
- strcpy函数实现
1,strcpy最简便实现 char * strcpy_to (char *dst, const char *src) { char *address = dst; assert((dst != NU ...
- spring aop advice
1.前置通知(BeforeAdvice): import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAd ...
- 为什么.NET感觉上比Java差一点
其实,我本人很喜欢.NET技术.工作经历中,大部分时间也在使用.NET开发. 这几年,由于工作的原因,开始进入Java+Linux世界. 今年,开始学习Python和Scala. 使用.NET时,有种 ...
- LCA算法倍增算法(洛谷3379模板题)
倍增(爬树)算法,刚刚学习的算法.对每一个点的父节点,就记录他的2k的父亲. 题目为http://www.luogu.org/problem/show?pid=3379 第一步先记录每一个节点的深度用 ...
- [Tool] 透过PowerPoint Online在部落格文章里内嵌简报
[Tool] 透过PowerPoint Online在部落格文章里内嵌简报 前言 讲课的时候,用PowerPoint做简报,好像已经成了讲课的惯例.而在课后,将课堂简报整理成部落格的文章,如果单纯是在 ...
- swift学习笔记之-下标脚本
//下标脚本subscript import UIKit /*下标脚本(Subscripts) 下标脚本: 1.可以定义在类(Class).结构体(structure)和枚举(enumeration) ...