Android(安卓)Studio使用注解式框架Butterknife教程
一.什么是注解式框架
Android 中写控制的处理代码,比如写一个Button 的onClick处理代码,传统的写法是
Button mLoginButton;mLoginButton= (Button)findViewById(R.id.loginButton);
如果一个Activity下十几个控件都要这么写一下.实在是一个没有技术含量的辛苦活.现在有如下写法,看起来简单多了.
@BindView(R.id.loginButton)Button mLoginButton;
但有人说这样写没省多少功能啊,现在如果有一个插件能自动写上述@bindView的写法呢,这样是不是简化太多了?
这个针对AS框架称为Butterknife, 源码在此 https://github.com/JakeWharton/butterknife
这里因为使用注释符号@来扩展,并没有改变java语法,因此称为注解式框架.它在编译就进行转换,因此不会影响使用性能.
而协助生成Butterknife的语句的as插件称为 android butterknifte zelezny,源码在此
https://github.com/avast/android-butterknife-zelezny
另外一个常见的辛苦活是写onClick绑定事件
mLoginButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { //do something... } }) );
当然在新的Android中可以直接在布局中指定onClick方法名
在对应窗口定义相应的方法即可
public void onLoginClick(View view){... }
另一种做法是用@click的事件绑定
@OnClick(R.id.loginButton)public void onLoginClick(Button button) { }//多个控件绑定一个事件@OnClick(R.id.button1,R.id.button2,R.id.button3)public void onButtonClick(Button button) { }
这是就是Butterknife设计思路,这里有一个腾讯Bugly 写的文章,也原理解释更清楚
<<深入理解 ButterKnife,让你的程序学会写代码>>
https://zhuanlan.zhihu.com/p/21628698
二.在项目导入Butterknife
2.1 安装android butterknifte zelezny 插件
Mac 打AS的-->Preferences-->Plugins
搜索android butterknifte zelezny ,点击Install安装,然后重启as,即可安装好
Paste_Image.png
2.2 在项目文件加入对butterknifte的引用
网上都针对7.xxx版本的说明,现在bk已经更新到8.2.1了.
项目的根目录了build.gradle修改
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' #加上这一句 }}
app下的build.gradle 加入
apply plugin: 'android-apt' #加入这一句android { ...}dependencies { compile 'com.jakewharton:butterknife:8.2.1' #加入这一句 apt 'com.jakewharton:butterknife-compiler:8.2.1'#加入这一句}
同步后项目即引用,如果库项目中使用BK,需要特殊写法,具体看
https://github.com/JakeWharton/butterknife/blob/master/README.md 说明
2.3 项目中使用插件
右键点击Activity的setContentView(R.layout.activity_activity);中的布局名.
再点击菜单中的右击,选择 Generate
然后Generate ButterKnife Injections,这时候生成类似于下列的选择框:
最终生成代码是
@BindView(R.id.leftButton)ImageButton leftButton;@BindView(R.id.titleText)TextView titleText;@BindView(R.id.rightButton)ImageButton rightButton;@BindView(R.id.progress_circle)CircleProgressBar progressCircle;@BindView(R.id.realtime_steps)TextView realtimeSteps;@BindView(R.id.chartPanel)RelativeLayout chartPanel;@BindView(R.id.cardlist)ListView cardlist;
完整操作可以看官方演示的Gif动画
https://github.com/avast/android-butterknife-zelezny/raw/master/img/zelezny_animated.gif
生成@bind代码后,会自动在setContentView 语句后加入
ButterKnife.bind(this); 让其生效,如果没有这一句,可手动插入
2.4 对ListViewxdt绑定
参加http://my.oschina.net/summerpxy/blog/500159
更多相关文章
- Java Web开发-简单的Java Web项目(含访问本地MySQL)-应用例程
- Android(安卓)ZXing 解析
- DataBinding使用指南(三):生成的binding类
- android studio2.1创建项目的两个坑
- PhoneGap(Android)环境搭建教程
- listview与adapter用法
- 一行代码,完成多层视图回退功能( android)(续)
- 《第一行代码》第一章
- Android(安卓)Gems — AMS的Service生命周期管理