annotation的配置
project的build.gradle
buildscript {
repositories {
jcenter() }
dependencies {
classpath '
com.android.tools.build:gradle:1.5.0'
classpath '
com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
allprojects {
repositories {
jcenter() }
}
task clean(type: Delete) {
delete rootProject.buildDir}
moudle的build.gradle配置
apply plugin: '
com.android.application'
apply plugin: '
android-apt'
def AAVersion = '
4.0+'
repositories {
jcenter() flatDir {
dirs '
libs'
}
}
android {
compileSdkVersion 19 buildToolsVersion "23.0.2" defaultConfig {
applicationId "source.code.watch.film" minSdkVersion 14 targetSdkVersion 14 versionCode 1 versionName "1.0" }
buildTypes {
release {
minifyEnabled false proguardFiles getDefaultProguardFile('
proguard-android.txt'
), '
proguard-rules.pro'
}
}
signingConfigs {
debug {
storeFile file("E:\psd\debug.keystore") }
}
}
dependencies {
compile fileTree(include: ['
*.jar'
], dir: '
libs'
) apt "org.androidannotations:androidannotations:$AAVersion" compile "org.androidannotations:androidannotations-api:$AAVersion"}
apt {
arguments {
androidManifestFile variant.outputs[0].processResources.manifestFile resourcePackageName '
source.code.watch.film'
}
}
今天和大家介绍下Android的懒人框架:annotation。
@EActivity
@EActivity(R.layout.main)public class MyActivity extends Activity {
}
@EFragment
@EFragment(R.layout.my_fragment_layout)public class MyFragment extends Fragment {
}
MyFragment fragment = new MyFragment_();
@EBean
public class MyClass {
}
- 这个类必须仅仅只能有一个构造函数,参数最多有一个context
@EActivity(R.layout.main)public class MyActivity extends Activity {
@Bean MyClass myClass;
}
@EActivity(R.layout.main)public class MyActivity extends Activity {
@Bean(MyClass.class) MyClassInterface myClassInterface;
}
@EBeanpublic class MyClass {
@RootContext Context context;
@RootContext Activity activity;
@RootContext Service service;
@RootContext MyActivity myActivity;
}
@EActivity(R.layout.main)public class MyActivity extends Activity {
@AfterInject public void doSomethingAfterInjection() {
}
}
- 如果想在类创建时期做一些操作可以这么做
@EBean(scope = Scope.Singleton)public class MySingleton {
}
- 单例类- 在单例类里面不可以注入view和事件绑定,因为单例的生命周期比Activity和Service的要长,以免发生内存溢出
@EView
@EViewpublic class CustomButton extends Button {
@App MyApplication application;
@StringRes String someStringResource;
public CustomButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
CustomButton button = CustomButton_.build(context);
@EViewGroup
@EViewGroup(R.layout.title_with_subtitle)public class TitleWithSubtitle extends RelativeLayout {
@ViewById protected TextView title, subtitle;
public TitleWithSubtitle(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setTexts(String titleText, String subTitleText) {
title.setText(titleText);
subtitle.setText(subTitleText);
}
}
@EAplication
@EApplicationpublic class MyApplication extends Application {
}
@EActivity(R.layout.main)public class MyActivity extends Activity {
@App MyApplication application;
}
EService
@EServicepublic class MyService extends Service {
}
MyService_.intent(getApplication()).start();
MyService_.intent(getApplication()).stop();
@EReceiver
@EReceiverpublic class MyReceiver extends BroadcastReceiver {
}
@EActivity(R.layout.main)public class MyActivity extends Activity {
@Receiver(actions = "org.androidannotations.ACTION_1") protected void onAction1() {
}
}
@EProvider
@EProviderpublic class MyContentProvider extends ContentProvider {
}
@EViewById
@EActivity(R.layout.main)public class MyActivity extends Activity {
@ViewById EditText myEditText;
@ViewById(R.id.myTextView) TextView textView;
}
- 没有括号里定义的变量名称必须和布局的id名称一致
@EAfterViews
@EActivity(R.layout.main)public class MyActivity extends Activity {
@ViewById TextView myTextView;
@AfterViews void updateTextWithDate() {
myTextView.setText("Date: " + new Date());
}
}
一定要在这里进行view的一些设置,不要在oncreate()中设置,因为oncreate()在执行时 view还没有注入
@StringRes
@EActivity(R.layout.main)public class MyActivity extends Activity {
@StringRes(R.string.hello) String myHelloString;
@StringRes String hello;
}
- 不能将变量设置成私有变量
@ColorRes
@EActivity(R.layout.main)public class MyActivity extends Activity {
@ColorRes(R.color.backgroundColor) int someColor;
@ColorRes int backgroundColor;
}
@AnimationRes
@EActivity(R.layout.main)public class MyActivity extends Activity {
@AnimationRes(R.anim.fadein) XmlResourceParser xmlResAnim;
@AnimationRes Animation fadein;
}
@DimensionRes
@EActivity(R.layout.main)public class MyActivity extends Activity {
@DimensionRes(R.dimen.fontsize) float fontSizeDimension;
@DimensionRes float fontsize;
}
@DimensionPixelOffsetRes
@EActivity(R.layout.main)public class MyActivity extends Activity {
@DimensionPixelOffsetRes(R.string.fontsize) int fontSizeDimension;
@DimensionPixelOffsetRes int fontsize;
}
@DimensionPixelSizeRes
@EActivity(R.layout.main)public class MyActivity extends Activity {
@DimensionPixelSizeRes(R.string.fontsize) int fontSizeDimension;
@DimensionPixelSizeRes int fontsize;
}
@Extra
@EActivity(R.layout.main)public class MyActivity extends Activity {
@Extra("myStringExtra") String myMessage;
@Extra("myDateExtra") Date myDateExtraWithDefaultValue = new Date();
}
@EActivity(R.layout.main)public class MyActivity extends Activity {
@Extra String myMessage;
}
- The name of the extra will be "myMessage",名字必须一致
MyActivity_.intent().myMessage("hello").start() ;
MyActivity_.intent().myMessage("hello").startForResult() ;
@SystemService
@EActivity(R.layout.main)public class MyActivity extends Activity {
@SystemService NotificationManager notificationManager;
}
@HtmlRes
@EActivity(R.layout.main)public class MyActivity extends Activity {
@HtmlRes(R.string.hello_html) Spanned myHelloString;
@HtmlRes CharSequence helloHtml;
}
@FromHtml
@EActivity(R.layout.main)public class MyActivity extends Activity {
@ViewById(R.id.my_text_view) @FromHtml(R.string.hello_html) TextView textView;
@ViewById @FromHtml TextView hello_html;
}
- 必须用在TextView
@NonConfigurationInstance
@EActivity(R.layout.main)public class MyActivity extends Activity {
@NonConfigurationInstance Bitmap someBitmap;
@NonConfigurationInstance @Bean MyBackgroundTask myBackgroundTask;
}
- 等同于Activity.onRetainNonConfigurationInstance()
@Click
@Click(R.id.myButton)void myButtonWasClicked() {
}
@Clickvoid anotherButton() {
}
@Clickvoid yetAnotherButton(View clickedView) {
}
- LongClick和这个类似
@SeekBarProgressChange
@SeekBarProgressChange(R.id.seekBar) void onProgressChangeOnSeekBar(SeekBar seekBar, int progress, boolean fromUser) {
}
@SeekBarProgressChange(R.id.seekBar) void onProgressChangeOnSeekBar(SeekBar seekBar, int progress) {
}
@SeekBarProgressChange({
R.id.seekBar1, R.id.seekBar2}
) void onProgressChangeOnSeekBar(SeekBar seekBar) {
}
@SeekBarProgressChange({
R.id.seekBar1, R.id.seekBar2}
) void onProgressChangeOnSeekBar() {
}
- @SeekBarTouchStart 和 @SeekBarTouchStop 接受开始和结束事件的监听
@TextChange
@TextChange(R.id.helloTextView) void onTextChangesOnHelloTextView(CharSequence text, TextView hello, int before, int start, int count) {
}
@TextChange void helloTextViewTextChanged(TextView hello) {
}
@TextChange({
R.id.editText, R.id.helloTextView}
) void onTextChangesOnSomeTextViews(TextView tv, CharSequence text) {
}
@TextChange(R.id.helloTextView) void onTextChangesOnHelloTextView() {
}
@BeforeTextChange
@BeforeTextChange(R.id.helloTextView) void beforeTextChangedOnHelloTextView(TextView hello, CharSequence text, int start, int count, int after) {
}
@BeforeTextChange void helloTextViewBeforeTextChanged(TextView hello) {
}
@BeforeTextChange({
R.id.editText, R.id.helloTextView}
) void beforeTextChangedOnSomeTextViews(TextView tv, CharSequence text) {
}
@BeforeTextChange(R.id.helloTextView) void beforeTextChangedOnHelloTextView() {
}
@AfterTextChange
@AfterTextChange(R.id.helloTextView) void afterTextChangedOnHelloTextView(Editable text, TextView hello) {
}
@AfterTextChange void helloTextViewAfterTextChanged(TextView hello) {
}
@AfterTextChange({
R.id.editText, R.id.helloTextView}
) void afterTextChangedOnSomeTextViews(TextView tv, Editable text) {
}
@AfterTextChange(R.id.helloTextView) void afterTextChangedOnHelloTextView() {
}
@Background
void myMethod() {
someBackgroundWork("hello", 42);
}
@Backgroundvoid someBackgroundWork(String aParam, long anotherParam) {
}
- 后台运行
void myMethod() {
someCancellableBackground("hello", 42);
boolean mayInterruptIfRunning = true;
BackgroundExecutor.cancelAll("cancellable_task", mayInterruptIfRunning);
}
@Background(id="cancellable_task")void someCancellableBackground(String aParam, long anotherParam) {
}
void myMethod() {
for (int i = 0;
i < 10;
i++) someSequentialBackgroundMethod(i);
}
@Background(serial = "test")void someSequentialBackgroundMethod(int i) {
SystemClock.sleep(new Random().nextInt(2000)+1000);
Log.d("AA", "value : " + i);
}
- 非并发执行
@Background(delay=2000)void doInBackgroundAfterTwoSeconds() {
}
- 延迟执行
@UIThread
void myMethod() {
doInUiThread("hello", 42);
}
@UiThreadvoid doInUiThread(String aParam, long anotherParam) {
}
- UI线程
@UiThread(delay=2000)void doInUiThreadAfterTwoSeconds() {
}
- 延迟
@UiThread(propagation = Propagation.REUSE)void runInSameThreadIfOnUiThread() {
}
- 优化UI线程
@EActivity(R.layout.main)public class MyActivity extends Activity {
@Background void doSomeStuffInBackground() {
publishProgress(0);
publishProgress(10);
publishProgress(100);
}
@UiThread void publishProgress(int progress) {
}
}
- 后台向UI线程传值
@OnActivityResult
@OnActivityResult(REQUEST_CODE)void onResult(int resultCode, Intent data) {
}
@OnActivityResult(REQUEST_CODE)void onResult(int resultCode) {
}
@OnActivityResult(ANOTHER_REQUEST_CODE)void onResult(Intent data) {
}
@OnActivityResult(ANOTHER_REQUEST_CODE)void onResult() {
}
好了。关于annotation的介就是这么多。欢迎进群交流。还有,求工作啊!!!!