【Android 从入门到放弃】 ButterKnife 使用

来源:互联网 发布:三菱中性笔 知乎 编辑:程序博客网 时间:2024/05/22 11:36

概述

        ButterKnife,中文称为黄油刀。为Android 视图提供绑定字段和方法。 简单的说,ButterKnife可以帮我们完成控件的初始化和点击监听等繁琐性工作。目前最新版是8.7.0。

        最新版的ButterKnife用了Java Annotation Processing技术,也就是说在Java代码编译成Java字节码的时候就已经处理了@Bind、@OnClick这些注解了,不会影响程序的运行效率。

相关资源地址:

  • Introduction:
    http://jakewharton.github.io/butterknife/
  • Java Doc:
    http://jakewharton.github.io/butterknife/javadoc/
  • github:
    https://github.com/JakeWharton/butterknife

前期准备工作

1. 导入 ButterKnife 依赖
在app Module的build.gradle文件中Dependencies增加下面两句

compile 'com.jakewharton:butterknife:8.7.0'annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'

2. 集成 ButterKnife Zelezny 插件
打开 File → Settings → Plugins → Browse repositories搜索“插件名”。该插件可以帮助开发者快速使用ButterKnife 的功能。
step1

step2

step3

小试牛刀

        只要右键布局id上,选择Generate,点击Generate Butterknife Injections,该插件会从对应的布局中查找有id属性的View,然后会出现在对应的选择页面。点击Confirm即可。
使用示例

适用场景

1. Activity
使用ButterKnife Zelezny 插件可以自动绑定。界面销毁后如果想解绑,可以手动设置如下。不过,官方文档没有明确说明是否需要手动解绑,欢迎大侠来拍砖。

Unbinder unbinder = ButterKnife.bind(this);unbinder.unbind();

2. Fragment
在Fragment中,使用ButterKnife Zelezny 插件可以自动绑定和解绑。

Unbinder unbinder;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,                         Bundle savedInstanceState) {    View view = inflater.inflate(R.layout.fragment_first, container, false);    unbinder = ButterKnife.bind(this, view);    return view;}@Overridepublic void onDestroyView() {    super.onDestroyView();    unbinder.unbind();}

3. Adapter
在Adapter中,使用ButterKnife Zelezny 插件可以自动生成ViewHolder

绑定资源

  1. ButterKnife Zelezny 插件可以实现绑定id和onClick事件,这也是 ButterKnife 最好用的功能。
  2. 除了ButterKnife Zelezny 插件绑定的功能外,其实 ButterKnife 还可以绑定控件数组/集合,字符串或者图片资源,以及各种类型的事件。但是由于不能通过ButterKnife Zelezny 插件自动生成,所以这些功能完全可以通过android api实现。

代码混淆

-keep class butterknife.** { *; }  -dontwarn butterknife.internal.**  -keep class **$$ViewBinder { *; }  -keepclasseswithmembernames class * {      @butterknife.* <fields>;  }  -keepclasseswithmembernames class * {      @butterknife.* <methods>;  } 

点滴分享  共同进步