Android Studio

Android Studio使用注解式框架Butterknife

2016-08-20  本文已影响1596人  蓝点工坊

一.什么是注解式框架

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方法名

<Button android:id="@+id/loginButton"
   android:onClick="onLoginClick">

在对应窗口定义相应的方法即可

 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

上一篇下一篇

猜你喜欢

热点阅读