ButterKnife
一、简介
ButterKnife 是注解中相对简单易懂的很不错的开源框架,是一个专注于Android系统的View注入框架, 以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在 编译的时候生成新的class 。
Butterknife优点如下:
强大的View绑定和Click事件处理功能,简化代码,提升开发效率
方便的处理Adapter里的ViewHolder绑定问题
运行时不会影响APP效率,使用配置方便
代码清晰,可读性强
Butterknife的github下载地址: https://github.com/JakeWharton/butterknife
二、使用步骤
实验环境:Android Studio 3.3.2版本、SDK API 26、Butterknife 1.6.0
打开Android Studio 的settings,依此进行如下操作:
在build.gradle 中添加如下两行代码:
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
注意在低于Android Studio 3.0版本的build文件中 implementation应改为compile
选中MainActivity中布局文件名称,右键点击生成按钮,如图所示
点击生成,自动注入三个View,并生成CheckBox和Button的点击事件函数,省去了我们查找元素的麻烦。生成后代码如下:
package com.example.butterknife;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.tv_butterknife)
TextView tvButterknife;
@BindView(R.id.cb_butterknife)
CheckBox cbButterknife;
@BindView(R.id.bt_butterknife)
Button btButterknife;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick({R.id.cb_butterknife, R.id.bt_butterknife})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.cb_butterknife:
break;
case R.id.bt_butterknife:
break;
}
}
}
之后对代码进行进一步的完善,添加点击的实现以及更改TextView的文本显示。
// 利用butterknife 生成点击事件
@OnClick({R.id.cb_butterknife, R.id.bt_butterknife})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.cb_butterknife:
Toast.makeText(this, "1111", Toast.LENGTH_SHORT).show();
break;
case R.id.bt_butterknife:
Toast.makeText(this, "2222", Toast.LENGTH_SHORT).show();
break;
}
}
三、效果演示
TextView的文本没用。点击bun1,弹出Toast提示1111
点击bun2按钮,弹出Toast提示2222。
四、其他常用标签
@BindArray 绑定string里面array数组;@BindArray(R.array.city ) String[] citys ;
@BindBitmap 绑定图片资源为Bitmap;@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;
@BindString 绑定一个String id为一个String变量;@BindString( R.string.app_name ) String meg;
@BindColor 绑定color;@BindColor(R.color.colorAccent) int black;
@BindDimen 绑定Dimen;@BindDimen(R.dimen.borth_width) int mBorderWidth;
@BindDrawable 绑定Drawable;@BindDrawable(R.drawable.test_pic) Drawable mTestPic;
@BindFloat 绑定float
@BindInt 绑定int
@BindBool 绑定boolean值
五、小结
通过实际操作可以发现,butterknife 对app的运行性能基本不会产生影响,但是在编译的时候可能会有编译速度变慢的情况。上面演示的是在activity中使用butterknife,更多的用法可参考官方文档,用法类似。
浅谈Android ButterKnife框架的使用: https://blog.csdn.net/woaixuexihhh/article/details/90639970
Android Butterknife(黄油刀) 使用方法总结: https://blog.csdn.net/donkor_/article/details/77879630