Android androidannotations

慕学海
2023-12-01

 

androidannotations是一款Android注入框架,可以方便我们编程,减少代码量(变相减少了错误的可能),让我们可以更多的把精力放在逻辑处理上。

本文API介绍取至https://github.com/excilys/androidannotations/wiki/Cookbook

配置

在AS中,需要在项目的build.gradle中进行加入如下配置(有注释部分)

buildscript {
	repositories {
		mavenCentral()
	}
	dependencies {
 		classpath 'com.android.tools.build:gradle:1.0.0'
 		// 使用android-apt
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
	}
}

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
	def AAVersion = '3.2'
	// 设置版本
	apt "org.androidannotations:androidannotations:$AAVersion" 
	compile "org.androidannotations:androidannotations-api:$AAVersion"
}

apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile
        resourcePackageName 'com.myproject.name'	// 指定包名
	}
}

使用

  • 基本使用示例
@EActivity(R.layout.translate)	// 设置布局文件
public class TranslateActivity extends Activity {
	@ViewById	// 注入 等同于 findViewById(R.id.textInput)
	EditText textInput;

	@ViewById(R.id.myTextView)
	TextView result;

	@AnimationRes	// 获取 anroid.R.anim.fade_in
	Animation fadeIn;

	@Click	// 设置R.id.doTranslate的监听
	void doTranslate() {
		translateInBackground(textInput.getText().toString());
    }

    @Background // 后台线程
    void translateInBackground(String textToTranslate) {
        String translatedText = callGoogleTranslate(textToTranslate);
        showResult(translatedText);
    }

    @UiThread // UI线程
    void showResult(String translatedText) {
        result.setText(translatedText);
        result.startAnimation(fadeIn);
    }

}

Activity

  • @EActivity注入Activity
@EActivity(R.layout.main)
public class MyActivity extends Activity {
	
}

也可以不注入

@EActivity
public class MyListActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
	}
}

注:使用Androidannotations注入的Activity在AndroidManifest.xml中配置时,名字后需要加上_,如MainActivity则为.MainActivity_

 

Fragment

  • @EFragment
@EFragment
public class MyFragment extends Fragment {
	
}

在布局中需要使用MyFragment_表示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/myFragment"
        android:name="com.company.MyFragment_"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

在程序中使用

MyFragment fragment = new MyFragment_();

也可以注入布局

@EFragment(R.layout.my_custom_layout)
public class MyFragment extends ListFragment {
  // R.layout.my_custom_layout will be injected
}

获取Fragment时

@EActivity(R.layout.fragments)
public class MyFragmentActivity extends FragmentActivity {
  @FragmentById
  MyFragment myFragment;

  @FragmentById(R.id.myFragment)
  MyFragment myFragment2;

  @FragmentByTag
  MyFragment myFragmentTag;

  @FragmentByTag("myFragmentTag")
  MyFragment myFragmentTag2;
}

自定义控件

@EView
public class CustomButton extends Button {
  @App
  MyApplication application;

  @StringRes
  public CustomButton(Context context,AttributeSet attrs) {
    super.(context,attrs);
  }
}

在布局中使用时

<!-- ... -->
<com.myapp.view.CustomButton_
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  />

自定义ViewGroups

layout

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >

    <ImageView
        android:id="@+id/image"
        android:layout_alignParentRight="true"
        android:layout_alignBottom="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="http://seniorzhai.github.io/2015/02/28/androidannotations%E7%AE%80%E4%BB%8B/@drawable/check" />

    <TextView
        android:id="@+id/title"
        android:layout_toLeftOf="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="12pt" />

    <TextView
        android:id="@+id/subtitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title"
        android:textColor="#FFdedede"
        android:textSize="10pt" />

</merge>

Java代码

@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);
  }
}

使用

<com.myapp.viewgroup.TitleWithSubtitle_
  android:id="@+id/firstTitle"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  />

Service

@EService
public class MyService extends IntentService {
  @SystemService
  NotificationManager notificationManager;
  
  @Bean 
  MyEnhancedDatastore datastore;

  @RestService
  MyRestClient = myRestClient;

  @OrmLiteDao(helper = DatabaseHelper.class,model = User.class)
  UserDao userDao;

  public MyService() {
    super(MyService.class.getSimpleName);
  }

  @Override
  proteced void onHandleIntent(Intent intent){
    showTast();
  }

  @UiThread
  void showToast() {
    Toast.makeText(getApplicationContext(),"Hi~",Toast.LENGTH_LONG).show();
  }
}

对于IntentService还可以设置一些操作

@ServiceAction
void mySimpleAction(String param) {
  //...
}

通过MyIntentService_.intent(getApplication()).myAction("test").start()使用

获取资源

// String
@StringRes(R.string.hello)
String myHelloString;
@StringRes
String hello;
// Color
@ColorRes(R.color.backgroundColor)
int someColor;
@ColorRes
int backgoundColor;
// animation
@AnimationRes(R.anim.fadein)
Animation fadein;
@AnimationRes
Animation fadein;
// DimensionRes
@DimensionRes(R.dimen.fontsize)
float fontSizeDimension;
@DimensionRes
float fontsize;
// 换算成PX
@DimensionPixelOffsetRes(R.sting.fontsize)
int fontSizeDimension;
@DimensionPixelOffsetRes
int fontsize;

其他

  • @BooleanRes
  • @ColorStateListRes
  • @DrawableRes
  • @IntArrayRes
  • @IntegerRes
  • @LayoutRes
  • @MovieRes
  • @TextRes
  • @TextArrayRes
  • @StringArrayRes

androidannotations是一款Android注入框架,可以方便我们编程,减少代码量(变相减少了错误的可能),让我们可以更多的把精力放在逻辑处理上。

 

 

 类似资料:

相关阅读

相关文章

相关问答