简介

ButterKnife是注解中相对简单易懂的很不错的开源框架,使用ButterKnife可以提升我们的开发效率,不需要写很多findViewById来找到View对象,可以为我们省去很多的时间。

特点

1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率

2.方便的处理Adapter里的ViewHolder绑定问题

3.运行时不会影响APP效率,使用配置方便

4.代码清晰,可读性强

下载地址:https://github.com/JakeWharton/butterknife

Butterknife插件:zelezny

插件安装

在File->Setting->Plugins中输入butterknife添加插件,然后重启AndroidStudio

插件使用

安装完插件以后,需要重启Android Studio,重启完以后,我们只需要把光标放到setContentView(R.layout.activity_main)上,然后alt+insert。对于多个需要绑定的id,省下了很多时间。我用一个gif动图来说明一下怎么使用吧

基本配置

1.在项目的project 的build.gredle 文件中添加。

implementation 'com.jakewharton:butterknife:8.8.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.0'

2.ButterKnife的绑定

①在Activity中绑定ButterKnife

在Activity中的onCreate绑定ButterKnife,我觉得最好的方式是写一个BaseActivity,在BaseActivity中完成绑定。在Activity中绑定ButterKnife必须在setContentView之后。使用ButterKnife.bind(this)进行绑定。具体实现代码如下:

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

②在Fragment中绑定ButterKnife

在Fragment中绑定ButterKnife的时候,需要在onCreateView中绑定,ButterKnife会返回一个Unbinder的实例,在Fragment中绑定ButterKnife,必须在onDestroyView方法中调用unbind方法进行Fragment解绑,还有一点,在Fragment中绑定ButterKnife的使用,this不能换成getActivity,只能用this,切记切记。使用ButterKnife.bind(this, view)进行绑定。代码如下:

  @Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.activity_item, null);bind = ButterKnife.bind(this, view);return view;}@Overridepublic void onDestroy() {super.onDestroy();//解除绑定bind.unbind();}

③在adapter中绑定ButterKnife

我们还可以在adapter中绑定ButterKnife,我们在adapter的ViewHolder中使用,在ViewHolder中添加一个构造方法,在进行new的时候将view传递进去。使用ButterKnife.bind(this, view)进行绑定。代码如下:

  public View getView(int position, View convertView, ViewGroup parent) {ViewHolder vh=null;if (convertView==null){convertView=  View.inflate(context,R.layout.activity_item,null);vh=new ViewHolder(convertView);convertView.setTag(vh);}else{vh= (ViewHolder) convertView.getTag();}vh.mIvPhoto.setImageResource(R.drawable.tupain);vh.mTvResult.setText(mDatas.get(position));return convertView;}class ViewHolder{@BindView(R.id.iv_photo)ImageView mIvPhoto;@BindView(R.id.tv_result)TextView mTvResult;public ViewHolder(View view) {ButterKnife.bind(this,view);}}

ButterKnife的基本使用

我们在这里讲一下ButterKnife的基本使用,这里大体列举一下,具体的使用方式大家可以去官方下载看一下。

1.绑定View

①控件id注解:@BindView()

@BindView(R.id.tv_result)
public TextView mTvResult;
@BindView(R.id.iv_photo)
public ImageView mIvPhoto;

②布局中多个id注解:@BindViews()

public class MainActivity extends Activity {  @BindViews({ R2.id.button1, R2.id.button2,  R2.id.button3})  public List<Button> listButton ;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  ButterKnife.bind(this);  listButton .get( 0 ).setText( "我是button1");  listButton .get( 1 ).setText( "我是button2 ");  listButton .get( 2 ).setText( "我是button3 ");  }
}

2.绑定资源

①绑定string字符串:@BindString()

@BindString(R.string.app_name)
public String appName;

②绑定array数组:@BindArray()

 <string-array name="basketballStar"><item>科比</item><item>杜兰特</item><item>詹姆斯</item><item>库里</item><item>哈登</item></string-array>@BindArray(R.array.basketballStar)public String[] stars;

③绑定颜色值:@BindColor()

@BindColor(R.color.colorAccent)
public int color;

④绑定drawable:@BindDrawable

 @BindDrawable(R.drawable.tupain)public Drawable drawable;

3绑定监听

我们这里就讲一下控件的监听事件

绑定控件点击事件:@onClick()

@OnClick(R.id.btn_butterKnife_drawable)public void gainPhoto(View view){}

 @onCheckedChanged监听的使用

@OnCheckedChanged({R.id.rb_one,R.id.rb_two,R.id.rb_three})  public void OnCheckedChangeListener(CompoundButton view, boolean ischanged ){  switch (view.getId()) {  case R.id.rb_one:  if (ischanged){//注意:这里一定要有这个判断,只有对应该id的按钮被点击了,ischanged状态发生改变,才会执行下面的内容     }  break;  case R.id.rb_two:  if (ischanged) {  }  break;  case R.id.rb_three:  if (ischanged) {  }  break;  default:  break;  }  }

更多绑定注解

还有很多绑定注解,我就不一一说明了,我们通过两张图片来了解一下。

①绑定注解,视图,资源等等,一共13个

②绑定事件,一共有12个事件监听

ButterKnife的代码混淆

在混淆文件中,添加如下代码:

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

以上就是关于ButterKnife的基本使用,如果对你的学习有帮助的话,可以点个关注哟,大家一起学习,一起进步。

下载

csdn:https://download.csdn.net/download/wen_haha/10898304

github:https://github.com/kongkongdaren/ButterKnifeDemo

Android中ButterKnife的使用相关推荐

  1. Android中ButterKnife的详细使用

    最近刚学会使用ButterKnife,真是超级好用,忍不住要分享给大家了. 写在前面:该文档使用7.0版本,8.0版本方法名有所改动,建议看官方文档,整体业务逻辑和原理没什么变动. 在Android编 ...

  2. Android中ButterKnife(黄油刀)的详细使用

    最近刚学会使用ButterKnife,真是超级好用,忍不住要分享给大家了. 写在前面:该文档使用7.0版本,8.0版本方法名有所改动,建议看官方文档,整体业务逻辑和原理没什么变动. 在android编 ...

  3. Android Studio中ButterKnife插件的安装与使用

    此文章来自http://www.jianshu.com/p/fe3c20f3ac27点击打开链接 Android Studio中ButterKnife插件的安装与使用 最近用到Android Butt ...

  4. Android中的动画(二)和ButterKnife (黄油刀)

    属性动画 什么是属性动画? 通过改变对象的属性做动画 ValueAnimator的使用方法 ValueAnimator valueAnimator=ValueAnimator.ofInt(height ...

  5. Kotlin 中Butterknife 和Android 中使用butterknife

    因为不太熟悉kotlin 所以就想写一个混编的Android  的测试 既有kotlin 又有android 的原生 目的:想了解下Kotlin ,和使用下Kotin中传说中的语法糖,别以后遇到大神写 ...

  6. RxJava操作符在android中的使用场景详解(一)

    转载请注明出处:http://www.wangxinarhat.com/2016/04/19/2016-04-19-rxjava-android-operate1/ 最近学习了RxJava在andro ...

  7. 静态路由_在Android中模拟静态方法:让我们总结一下

    静态路由 在Android中编写本地单元测试时,面临的局限性之一是测试是针对没有任何代码的android.jar版本运行的. 如文档所述,必须模拟对Android代码的任何依赖关系. 一个简单的单元测 ...

  8. 【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术

    文章目录 一.Android 中的 Java 源码打包流程 1.Java 源码打包流程 2.字符串常量池 二.Android 中的字节码操作方式 一.Android 中的 Java 源码打包流程 Ja ...

  9. 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 FFmpegAndroid 框架 )

    文章目录 一.推荐开源项目 二.Android 中执行 FFMPEG 指令 1.导入依赖 2.Java 代码编写 3.使用时的代码示例 三.博客资源 一.推荐开源项目 最近需要在 Android 中进 ...

最新文章

  1. R语言ggplot2可视化图像设置不同的字体实战
  2. Bootloader
  3. tensorflow之transpose的使用
  4. python网页优化_python大佬养成计划----JavaScript对html的优化
  5. 一击进榜!达摩院十年“扫地僧”,揭秘阿里云数据仓库逆袭之旅
  6. python3 爬虫--Chrome以及 Chromedriver安装配置
  7. YOLOv5训练coco128数据集流程
  8. ElasticSearch---------------------step2,了解elasticsearch相关的基本概念
  9. 使用HTML5,画布和开放数据创建全球降水(雨)可视化
  10. Android 基本测试工具的使用
  11. 蓝桥杯第七届决赛JAVA真题----广场舞
  12. Linux 设备驱动 ==== 字符驱动
  13. Activiti工作流画图工具介绍
  14. egret 显示帧动画
  15. Hadoop专业解决方案-第5章 开发可靠的MapReduce应用
  16. 《王者荣耀》伤害计算(数值研究)
  17. android glide缺少方法,android - 无法膨胀且找不到类android支持设计的行为BottomSheetBehavior - 堆栈内存溢出...
  18. C语言初步学习笔记——第四节 有符号数与常见关键字
  19. 服务器防火墙 配置端口号
  20. 2020,神策数据 +

热门文章

  1. 简单谈谈语音评测(语音评价)
  2. 教你识别思科交换机型号
  3. 化工集团公司数字化转型有力抓手“数字化示范项目建设
  4. 一周技术学习笔记(第81期)-《愿生命从容》
  5. 对java导出PDF进行图片,(图片/文字)水印,页眉页脚的添加
  6. 学 Python 的乐园,坚持一年,值了!
  7. echarts 图例 两行展示
  8. css文字超过两行溢出隐藏
  9. 春节钱包大流量奖励系统入账及展示的设计与实现
  10. PCB布局布线的相关基本原理和设计技巧