一.什么是注解式框架

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,这时候生成类似于下列的选择框:

Paste_Image.png

最终生成代码是

@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

Paste_Image.png

生成@bind代码后,会自动在setContentView 语句后加入
ButterKnife.bind(this); 让其生效,如果没有这一句,可手动插入

2.4 对ListViewxdt绑定

参加http://my.oschina.net/summerpxy/blog/500159

更多相关文章

  1. Java Web开发-简单的Java Web项目(含访问本地MySQL)-应用例程
  2. Android(安卓)ZXing 解析
  3. DataBinding使用指南(三):生成的binding类
  4. android studio2.1创建项目的两个坑
  5. PhoneGap(Android)环境搭建教程
  6. listview与adapter用法
  7. 一行代码,完成多层视图回退功能( android)(续)
  8. 《第一行代码》第一章
  9. Android(安卓)Gems — AMS的Service生命周期管理

随机推荐

  1. Android中Context和Resource之间的关系
  2. Android使用代码实现左右半圆的按钮背景
  3. Android(安卓)SDK与ADT版本不匹配的解决
  4. Android开发手记——登陆界面
  5. Android(8) RecyclerView适配器实现多布
  6. android有用代码片段(一)
  7. Android_MediaPlayer:java.io.IOException
  8. Android(安卓)四种加载方式详解(standard
  9. Android(安卓)Studio 找不到R文件解决方
  10. Android(安卓)cupcake源代码获取和编译 f