Butter Knife

Github地址: https://github.com/JakeWharton/butterknife

官方说明给出的解释是 Bind Android views and callbacks to fields and methods.

Field and method binding for Android views which uses annotation processing to generate boilerplate code for you.

  • Eliminate findViewById calls by using @BindView on fields.
  • Group multiple views in a list or array. Operate on all of them at once with actions, setters, or properties.
  • Eliminate anonymous inner-classes for listeners by annotating methods with @OnClick and others.
  • Eliminate resource lookups by using resource annotations on fields.

意思就是:将Android视图和回调绑定到字段和方法。

使用注释处理为您生成样板代码的Android视图的字段和方法绑定。

通过在字段上使用@BindView消除findViewById调用。

  • 在列表或数组中分组多个视图。 使用操作,设置器或属性一次操作所有这些。
  • 通过使用@OnClick和其他方法注释方法,消除匿名内部类的侦听器。通过在字段上使用资源注释来消除资源查找。

官方文档给出了Butter Knife在Gradle里面如何配置

下面我们就来配置Buffer Knife到工程里面

新建Android Studio工程(作者的Android Studio版本是2.3)

项目主体结构如下:

首先,配置build.gradle(Project:XXX)

新建工程的build.gradle(Project:XXX)初始样子如下:

然后我们按照官方文档进行配置

在repositories {}里面添加

mavenCentral()

在dependencies {}里面添加

classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'

即:

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

其次,修改build.gradle(Module:XXX)

新建工程的build.gradle(Module:XXX)初始样子如下:

然后我们按照官方文档进行配置

在开头添加
apply plugin: 'com.jakewharton.butterknife'
在dependencies {} 里面添加 
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
至此,我们的Butter Knife就已经正确的配置到我们的工程里面了。
彩蛋:
做过安卓项目的同学都知道,比如工程里面的get、set 方法,都是通过Generate快速编译的。(说到这里如果你没看懂的话,说明你的Android开发经验太少了,请自行百度查找)

又有同学问了,我在Github上面看到大神们用Butter Knife去编写代码,初始化的时候总是蒙圈。其实 Butter Knife的初衷就是简化代码,让程序员更有效率的开发。

这时候可以利用Android Studio里面的 Plugins来辅助我们开发。

File -> Settings -> Plguins

然后在右面的搜索框里面输入 ButterKnife,然后点击下面的 Search in repositories

就会出现下图的场景:

选择第一个 Android ButterKnife PPlugin Plus 然后点击 Install,重启Android Studio

重启之后,Butter Knife就可以很好的为我们效劳了。

那么Butter Knife如何适用呢?

首先,打开布局文件

Android Studio更新到2.3以后的布局文件初始是这样的

为了做演示,我们稍微修改一下,添加几个控件。

一个EditText,两个Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.tnnowu.android.butterknifedemo.MainActivity">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

</LinearLayout>

然后,我到Class类里面去用 Butter Knife绑定控件,代替 findViewById

初始Class类文件如下:

在布局文件上面右键,选择Generate

然后选择 Generate Butterknife Injections

这里我们可以看到布局文件中的控件都出现在上面,可以额外选择点击事件OnClick

Confirm之后的场景如下:

package com.tnnowu.android.butterknifedemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @BindView(R.id.edit_text)
    EditText editText;
    @BindView(R.id.btn1)
    Button btn1;
    @BindView(R.id.btn2)
    Button btn2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.btn1, R.id.btn2})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                break;
            case R.id.btn2:
                break;
        }
    }
}

可以清晰的看到 Butter Knife 已经开始为我们效劳了。

(注意:ButterKnife.bind(this) 是一定要写在onCreate里面)

学会使用 BUffer Knife,可以让程序自动化帮忙减轻工作量!

Butter Knife使用详解的更多相关文章

  1. android Butter Knife 使用详解

    Butter Knife github连接:https://github.com/JakeWharton/butterknife 本文使用的butterknife版本7.0.1 butterknife ...

  2. ButterKnife的使用详解

    ButterKnife的使用详解 1,概述: ButterKnife则是注解中相对简单易懂的很不错的开源框架. ButterKnife是目前常用的一种依托Java注解机制实现辅助代码生成的框架:用到了 ...

  3. PHP中的闭包详解

    PHP闭包(Closure)使用详解 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-02我要评论 本篇文章介绍了,PHP闭包(Closure)的使用介绍,需要的朋友参考下   不知不 ...

  4. R1(上)—R关联规则分析之Arules包详解

    Arules包详解 包基本信息 发布日期:2014-12-07 题目:挖掘关联规则和频繁项集 描述:提供了一个表达.处理.分析事务数据和模式(频繁项集合关联规则)的基本框架. URL:http://R ...

  5. 详解JMeter函数和变量(转载)

    详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var ...

  6. jmeter--函数助手对话框之参数详解

    详解JMeter函数和变量 测试人员可以在JMeter的选项菜单中找到函数助手对话框("Function Helper"对话框),如图11-1所示. 图11-1 函数助手(Func ...

  7. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

随机推荐

  1. C++编程练习(6)----“实现简单的队列的链式存储结构“

    队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...

  2. DllRegisterServer的调用失败的问题解决方法

    1'按键盘上的win+x键调出常用命令. 2'选择“命令提示符(管理员)“ 3'在”命令提示符“中输入”regsvr32 c:\Windows\SysWOW64\comdlg32.ocx“或其他ocx ...

  3. experss框架—基础认识

    express简介: Express是一个简洁.灵活的node.js Web应用开发框架, 它提供一系列强大的功能,比如:模板解析.静态文件服务.中间件.路由控制等等,并且还可以使用插件或整合其他模块 ...

  4. 来一波CSS兼容问题小总结吧

    1.DOCTYPE 影响 CSS 处理; 2.火狐 谷歌等浏览器 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 ...

  5. vb.net 总结

    vb.net 可以说是vb6.0的升级版,在语法结构上与vb很相似.那么,我们就来说一下它们之间有什么不同的地方吧. vb6.0          vb是我们入门的一个非常好的编程软件,它可以实现软件 ...

  6. WKWebView的使用与JS交互详细解读

    前言: WKWebView 这是在iOS8.0之后增加的一个比UIWebView更加完善和强大的控件!看网上关于它的博客也是有许多的了,从各个方面总结一下这个WKWebView看网上说它主要是为了和J ...

  7. mac 终端简单指令

    pwd 当前工作目录 cd(不加参数) 进root cd(folder) 进入文件夹 cd .. 上级目录 cd ~ 返回root cd - 返回上一个访问的目录 rm 文件名 删除 cat 文件名( ...

  8. 申请免费的SSL证书(Win7,PowerShell,Let's Encrypt)

    随着网络安全形势的发展,SSL已是各大网站的标配,启用SSL的好处自然不必多说,然后每份SSL证书也要花费不菲的银子,按最便宜的DV证书来看,每年也要个四五百呢. 有趋势有需求,自然也有免费可用.免费 ...

  9. APC注入

    0X01 注入原理 当线程被唤醒时APC中的注册函数会被执行的机制,并依此去调用我们的DLL加载代码,进而完成注入的目的 具体的流程: 1 当EXE里的某个线程执行到sleepEX(),或者waitF ...

  10. php批量删除,批量操作

    批量删除多条记录,对于比较多的信息,如果没有批量删除功能是非常麻烦的. 1.从数据库中拿一张表过来,写个复选框进行选择   可以加全选复选框 连接数据库什么的都不写啦 代码: <form act ...