这段时间学习了下ButterKnife注解框架,学习的不是特别深入,但是基础也差不多了,在此记录总结一下。

  ButterKnife是一个Android View注入的库,主要是注解的使用,可以减少很多代码的书写,使代码结构更加简洁和整齐。ButterKnife可以避免findViewById的调用,android开发的人都知道在Android初始化控件对象的时候要不断地调用findviewById,有多少控件就需要调用多少次,而使用ButterKnife可以省去findViewById的调用,不仅如此还可以省去监听事件的冗长代码,只需要一个注解就可以完成。下面我们来看看ButterKnife到底是如何使用的。

一、如何引入ButterKnife?

1. 首先是在Project的gradle中添加依赖:

 dependencies {
//butterknife的导入
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

2. 在app的gradle中添加如下: 
在gradle中添加:

 apply plugin: 'android-apt'

在gradle的dependencies中添加:

dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}

3. rebuild就完成了。

这里关于Project和app中build.gradle的区别可以参考这篇文章:Android Project和app中两个build.gradle配置的区别

二、如何使用?

注意:button 的修饰类型不能是:private 或者 static 。 否则会报错:错误: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1)

(一)、View的绑定

1. 控件id的注解:@BindView()

 @BindView(R.id.toolbar)
public Toolbar toolbar;

然后再Activity的onCreate()中调用:

 ButterKnife.bind( this ) ;

2. 多个控件id 注解: @BindViews()

     @BindViews({ R.id.button1  , R.id.button2 ,  R.id.button3 })
public List<Button> buttonList ;

然后再Activity的onCreate()中调用:

 ButterKnife.bind( this ) ;

3. 绑定其他View中的控件 
Butter Knife提供了bind的几个重载,只要传入跟布局,便可以在任何对象中使用注解绑定。调用ButterKnife.bind(view. this);方法。但是一般调用 Unbinder unbinder=ButterKnife.bind(view, this)方法之后需要在调用 unbinder.unbind()解绑。 
所以一般在activity中调用之后再绑定其他的view中的控件时我都会使用(四)中的方法。

(二)、资源的绑定

 <resources>
<string name="hello">Hello</string>
<string-array name="array">
<item>hello</item>
<item>hello</item>
<item>hello</item>
<item>hello</item>
</string-array>
</resources>

1. @BindString() :绑定string 字符串

     @BindString(R.string.hello)
public String hello;

然后再Activity的onCreate中调用:

 ButterKnife.bind( this ) ;

2. @BindArray() : 绑定string里面array数组

     @BindArray(R.array.array)  //绑定string里面array数组
String [] array;

然后再Activity的onCreate()中调用:

 ButterKnife.bind( this ) ;

3. @BindBitmap( ) : 绑定Bitmap 资源

     @BindBitmap(R.mipmap.ic_launcher)
public Bitmap bitmap;

然后再Activity的onCreate()中调用:

 ButterKnife.bind( this ) ;

6. 其他资源 
绑定BindColor(),BindDimen(),BindDrawable(),BindInt()等都是同样的方法,(1). 绑定资源。 (2).调用ButterKnife.bind()方法。

(三)、事件的绑定

1. 绑定OnClick方法

     @OnClick(R.id.login_activity_button_login)
public void clickLogin() {
}

然后再Activity的onCreate()中调用:

 ButterKnife.bind( this ) ;

如果绑定多个id的话,用“,”逗号隔开。

(四)、其他

Butter Knife提供了一个findViewById的简化代码:findById,用这个方法可以在View、Activity和Dialog中找到想要View,而且,该方法使用的泛型来对返回值进行转换,也就是说,你可以省去findViewById前面的强制转换了。

 View view = LayoutInflater.from(context).inflate(R.layout.thing, null);
TextView firstName = ButterKnife.findById(view, R.id.first_name);

ButterKnife.bind的调用可以被放在任何你想调用findViewById的地方。

Android ButterKnife注解框架使用的更多相关文章

  1. Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny

    首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this ...

  2. ButterKnife注解框架详解

    Android 懒人注解框架 :https://github.com/JakeWharton/butterknife 前言: 注解,相信很多同学都用到了,对控件进行初始化的时候需要用到 findVie ...

  3. Android ButterKnife注解式开发

    在Android开发中findViewById和setOnClickListener解脱写法. 在任意的一个类中 @Bind(R.id.et) EditText editText; @OnClick( ...

  4. 开源框架相关面试问题-butterknife注解框架面试问题讲解

    butterknife使用简介: 它的出现主要是为了解决咱们在android开发中会写大量的findViewById().setOnClickListener()这样的索然无味的代码,其实它就是一个依 ...

  5. [旧][Android] ButterKnife 浅析

    备注 原发表于2016.05.08,资料已过时,仅作备份,谨慎参考 前言 自上星期写 Retrofit 写吐之后 ... 我问大队长能不能换个其他什么东西写,大队长就说了个单词 ButterKnife ...

  6. Android注解框架实战-ButterKnife

    文章大纲 Android注解框架介绍 ButterKnife实战 项目源码下载   一.框架介绍 为什么要用注解框架?  在Android开发过程中,我们经常性地需要操作组件,操作方法有findVie ...

  7. Android 注解框架对比

    Java的注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,标记可以加在包,类,属性,方法,本地变量上.然后你可以写一个注解处理器去解析处理这些注解(人称编译时注解 ...

  8. 开发自己的山寨Android注解框架

    目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...

  9. Android Butterknife框架

    Android Butterknife框架 注解攻略 时间 2014-02-27 09:28:09  Msquirrel原文  http://www.msquirrel.com/?p=95 一.原理. ...

随机推荐

  1. navigator.geolocation详解

    https://blog.csdn.net/qq_27626333/article/details/51815467 PositionOptions: JSON对象,监听设备位置信息参数 naviga ...

  2. mysql触发器(Trigger)简明总结和使用实例

    一,什么触发器 1,个人理解触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了.你放炮仗,点燃了,一会就炸了.2,官方定义触发器(tr ...

  3. CSS Sprites的原理(图片整合技术)(CSS精灵)/雪碧图

    CSS Sprites的原理(图片整合技术)(CSS精灵)/雪碧图   一.将导航背景图片,按钮背景图片等有规则的合并成一张背景图,即将多张图片合为一张整图,然后用background-positio ...

  4. 关于ZIP自动打包的进一步进化思路

    http://blog.163.com/long200259@126/blog/static/11288755920093120529157/

  5. PHP 文件夹操作「复制、删除、查看大小、重命名」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

  6. Python的hasattr() getattr() setattr() 函数使用方法(简介)

    hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...

  7. spring+atomikos+mybatis 多数据源事务(动态切换)

    注:自动切换,是为不同的数据源,却要对应相同的dao层: 1.与无事务版的一样,创建DynamicDataSource类,继承AbstractRoutingDataSource package com ...

  8. idea导入或者检出项目时发现编辑器左侧无法显示项目目录结构

    按下列步骤操作: 1. 关闭IDEA,  2.然后删除项目文件夹下的.idea文件夹 3.重新用IDEA工具打开项目

  9. Python并发编程-多进程进程锁

    from multiprocessing import Process import json import time from multiprocessing import Lock def sho ...

  10. 利用gmpy2破解rsa

    gmpy2的相关文档: https://gmpy2.readthedocs.io/en/latest/ ================ 题目: 来自实验吧的rsarsa:http://www.shi ...