ButterKnife 是一个资源绑定框架,它使用注解来进行资源绑定、监听事件绑定的操作,可以帮我们省去findViewById、setXXXListener等繁琐的代码。使用方便,不影响性能(编译时就生成相应文件),提高开发效率。
配置1. 在 app/build.gradle 中添加如下:
//Butter Knife
implementation 'com.jakewharton:butterknife:10.2.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
2. 在 project/build.gradle 中添加 classpath 如下:
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.0'
三、使用
1. 设置资源绑定
- 使用@BindView( )绑定单个视图
@BindView(R.id.rv_collect)
RecyclerView mRvCollect;
- 使用@BindViews( )绑定一组视图
@BindViews({ R2.id.tv_name, R2.id.tv_age, R2.id.tv_introduce })
List buttonList ;
- 使用@BindString( )绑定单个字符串资源
@BindString(R.string.tip)
String tip;
- 使用@BindArray( )绑定一组字符串资源
@BindArray(R.array.tips)
String[] tips ;
- 绑定颜色值 @BindColor( )
@BindColor(R.color.theme)
int themeColor;
- 绑定图片 @BindBitmap( )
@BindBitmap(R.mipmap.ic_launcher)
Bitmap appLogo ;
2. 设置监听绑定
- 点击事件 @OnClick( )
@OnClick(R.id.btn1)
public void show1(){
Toast.makeText(this, "onClick", Toast.LENGTH_SHORT).show();
}
- 长按事件 @OnLongClick( )
@OnLongClick(R.id.btn2)
public void show2(){
Toast.makeText(this, "onLongClick", Toast.LENGTH_SHORT).show();
}
- 多个控件绑定一个事件
@OnClick( {R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4} )
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn1:
Toast.makeText(this, "onclick1", Toast.LENGTH_SHORT).show();
break;
case R.id.btn2:
Toast.makeText(this, "onclick2", Toast.LENGTH_SHORT).show();
break;
case R.id.btn3:
Toast.makeText(this, "onclick3", Toast.LENGTH_SHORT).show();
break;
case R.id.btn4:
Toast.makeText(this, "onclick4", Toast.LENGTH_SHORT).show();
break;
}
}
开启绑定
需要通过 ButterKnife.bind() 方法开启绑定,调用该方法后,对应的资源和监听事件就会开始进行注入绑定。
1. 在Activity中开启绑定
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在setContentView后调用
ButterKnife.bind(this);
}
2. 在Fragment中开启绑定
private Unbinder unbinder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
//返回Unbinder值用于解绑
//这里调用的方法与Activity调用的有区别
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
//解绑
unbinder.unbind();
}
3. 在ViewHolder中开启绑定
static class ViewHolder {
@BindView(R.id.title) TextView name;
@BindView(R.id.job_title) TextView jobTitle;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
混淆
在 proguard-rules.pro 文件中添加以下内容进行混淆配置 ** 代码混淆**
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* ;
}
-keepclasseswithmembernames class * {
@butterknife.* ;
}
插件
zelezny插件可以快速自动生成ButterKnife绑定相关的代码。
- 先通过Android Studio —> Setting—> Plugins —> Browse Responsitories —> 搜索zelezny并下载,下载后请重启Android Studio。
- 右键R.layout.xxxx,点击Generate—>Generate ButterKnife Injections,选择目标View,即可生成相应的代码。