ButterKnife是注解中相对简单易懂的很不错的开源框架,使用ButterKnife可以提升我们的开发效率,不需要写很多findViewById来找到View对象,可以为我们省去很多的时间。
1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2.方便的处理Adapter里的ViewHolder绑定问题
3.运行时不会影响APP效率,使用配置方便
4.代码清晰,可读性强
插件安装
在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)进行绑定。具体实现代码如下:
@Override
protected 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)进行绑定。代码如下:
@Override
public 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;
}
@Override
public 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的基本使用,这里大体列举一下,具体的使用方式大家可以去官方下载看一下。
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
2.绑定资源
①绑定string字符串:@BindString()
@BindString(R.string.app_name)
public String appName;
②绑定array数组:@BindArray()
- 科比
- 杜兰特
- 詹姆斯
- 库里
- 哈登
@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个事件监听
在混淆文件中,添加如下代码:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* ;
}
-keepclasseswithmembernames class * {
@butterknife.* ;
}
以上就是关于ButterKnife的基本使用,如果对你的学习有帮助的话,可以点个关注哟,大家一起学习,一起进步。
csdn:https://download.csdn.net/download/wen_haha/10898304
github:https://github.com/kongkongdaren/ButterKnifeDemo