之前也了解过注解框架及AndroidAnnotations框架,但是没有深入地学习,也没有应用到自己的项目中去。这几天看了一下相关的学习视屏,感觉这个框架确实好用,所以决定认真学习下,在接下来的项目中利用起来! 学习Android框架之类的东东肯定少不了上Github及对应的官网上看下AndroidAnnotationsAndroidAnnotations相应的网址是如下:
在github上的地址是:https://github.com/excilys/androidannotations/wiki 。
官网地址是:http://androidannotations.org/ 。这两个网址对AndroidAnnotations的介绍和使用都非常地详细。AndroidAnnotations框架的最大优势在于可以用注解的方式大大减少开发的代码量,提高程序的运行效率。
使用AndroidAnnotations前要对开发工具进行相应的设置,使用Eclipse开发工具可以参考:http://jingyan.baidu.com/article/5552ef47c25fea518ffbc9e9.html,如果是使用AndroidStudio作为开发工具,设置可以参考:http://blog.csdn.net/hanhailong726188/article/details/40585057等。接下来就开始我们的AndroidAnnotation使用。
在AndroidAnnotations中有很多针对各种控件,组件等使用的annotations,开发中常用的,可以快速上手的annotations有:
1,Enhanced componets(组件注解):
- @EActivity:对Activity的注解操作,我们在写一个Activity时,只要在类名上写上@EActivity(R.layout.xx),就可以把对应的布局关联到此Activity,再也不用在Oncreate(Bundle savedInstanceState)来通过setContentView(R.layout.xx)来关联对应布局,方便吧!
- @EService:对Service组件的注解。
- @EProvider:对ContentProvider组件的注解。
- @EReceiver:对Broadcastreceiver组件进行注解。
- 还有@EApplication,@EView等。
2,Injections(常用操作注解):
- @ViewById:替代我们平时 代码 中的findViewsById();
- @ViewsById:同上一样的,只不过可以同时对多个view进行findViewsById()操作。
- @AfterViews:用于在我们@ViewById后进行设置数据等操作。
- @Extra:用于在组件之间跳转时数据传递操作,我们通常是在Intent中putExtra(),然后再接收页面用getIntent().getString()来获取数据,有了@Extra后,我们就不用getIntent().getString()来取传递的数据了。
3,Event binding(事件绑定注解):
- @Click:点击事件注解,替代我们平时的setOnclickListener()方法,只要在方法上加上@Click(R.id.btn),括号里指要进行点击事件的控件id,
- @Touch:onTouch()事件注解
- @ItemClick,@ItemLongClick,@ItemSelect:对我们学用的ListView,GridView等组件的item点击事件,item长按事件进行的注解 操作。
- @TextChange,@AtferTextChange,@BeforTextChange:用与EditText等输入文字变化 监听的注解。
- 还有@FocusChange等。
4,Threading(线程处理注解)
- @Background:后台处理操作
- @UiThread:主线程操作等
5,Resource injection(资源文件注解):
- @StringRes:对资源文件String.xml关联注解
- @ColorrRes:对资源文件color.xml关联注解
- 还有@DimensionRes,@StringArrayRes等
6,还有其它很多类型的
annotations,可以参考官网:https://github.com/excilys/androidannotations/wiki/AvailableAnnotations。
下面是使用注解编写代码的小例子,也是参考官网的:
@EActivity(R.layout.translate) // Sets content view to R.layout.translate public class TranslateActivity extends Activity { @ViewById // Injects R.id.textInput EditText textInput; @ViewById(R.id.myTextView) // Injects R.id.myTextView TextView result; @AnimationRes // Injects android.R.anim.fade_in Animation fadeIn; @Click // When R.id.doTranslate button is clicked void doTranslate() { translateInBackground(textInput.getText().toString()); } @Background // Executed in a background thread void translateInBackground(String textToTranslate) { String translatedText = callGoogleTranslate(textToTranslate); showResult(translatedText); } @UiThread // Executed in the ui thread void showResult(String translatedText) { result.setText(translatedText); result.startAnimation(fadeIn); } // [...] }
1,比如我们要项目中有个Activity是FristActivity,我们在注册到AndroidManifest.xml中对应的activity是在
FristActivity_(在你写的Activity类名后加下划线),否则将报错,
2,我们在跳转页面时,我们写入Intent中跳转目标Acitivity类名也是要写末尾带下划线的对应Activity,
3,我们在使用@ViewById时,如果你在Activity中定义的组件名和xml中的id是一样的,则可以直接写@ViewById,而不用写@ViewById(R.id.xx),
4,
一定要@AfterViews对应的方法中进行view的一些设置,不要在oncreate()中设置,因为oncreate()在执行时 view还没有注入,这时运行会报错。
5,推荐一篇注解使用介绍较全面(当然没官网全面啦)的文章:
http://www.csdn123.com/html/topnews201408/29/729.htm。