美文网首页Android Studio
Android Studio使用注解式框架Butterknife

Android Studio使用注解式框架Butterknife

作者: 蓝点工坊 | 来源:发表于2016-08-20 17:28 被阅读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

    相关文章

      网友评论

        本文标题:Android Studio使用注解式框架Butterknife

        本文链接:https://www.haomeiwen.com/subject/rcsisttx.html