1. 准备
安装依赖
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
安装插件
Preferences -> Plugins,搜索Android Butterknife Zelezny,点击install
可能会出现的问题:
- 提示gradle没有annotationProcessor方法(检查gradle版本,升级到2.2.1+)
2. 使用
2.1 使用插件
在layout资源文件名上面右击,选择Generate -> Generate ButterKnife injections(或者快捷键control+enter),即可选择生成view对应的注解和OnClick
2.2 手动
- 绑定view
@BindView(R.id.main_text1)
TextView mainText1;
@BindView(R.id.main_edit1)
EditText mainEdit1;
@BindView(R.id.main_button1)
Button mainButton1;
- 点击事件
@OnClick({R.id.main_text1,R.id.main_edit1,R.id.main_button1})
public void click(View v) {
switch (v.getId()){
case R.id.main_text1:
mainText1.setText("Text被点击了。。。");
break;
case R.id.main_edit1:
mainText1.setText("Edit被点击了。。。");
break;
case R.id.main_button1:
mainText1.setText("Button被点击了。。。");
break;
}
}
- 绑定资源
@BindString(R.string.title) String title;
@BindDrawable(R.drawable.graphic) Drawable graphic;
@BindColor(R.color.red) int red; // int 或 ColorStateList field
@BindDimen(R.dimen.spacer) Float spacer; // int 或 float
- Fragment中的使用
在Fragment中使用和在Activity中使用,只有一点不一样:在获取View的时候,加多一个view参数把View绑定到ButterKnife就行了。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_my, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
在销毁的时候需要解绑
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
- Adapter ViewHolder中的使用
static class ViewHolder{
@BindView(R.id.item_text1)
TextView itemText1;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
3. 注解列表
事件注解
名称 | 作用 |
---|---|
@OnClick | 点击事件 |
@OnCheckedChanged | 选中,取消选中 |
@OnEditorAction | 软键盘的功能键 |
@OnFocusChange | 焦点改变 |
@OnItemClick | item被点击(注意这里有坑,如果item里面有Button等这些有点击的控件事件的,需要设置这些控件属性focusable为false) |
@OnItemLongClick | item长按(返回真可以拦截onItemClick) |
@OnItemSelected | item被选择事件 |
@OnLongClick | 长按事件 |
@OnPageChange | 页面改变事件 |
@OnTextChanged | EditText里面的文本变化事件 |
@OnTouch | 触摸事件 |
@Optional | 选择性注入,如果当前对象不存在,就会抛出一个异常,为了压制这个异常,可以在变量或者方法上加入一下注解,让注入变成选择性的,如果目标View存在,则注入, 不存在,则什么事情都不做 |
绑定注解
名称 | 作用 |
---|---|
@BindViews | 绑定多个view id为一个view的list变量 |
@BindView | 绑定一个view id为一个view 变量 |
@BindArray | 绑定string里面array数组,@BindArray(R.array.city ) String[] citys ; |
@BindBitmap | 绑定图片资源为Bitmap,@BindBitmap( R.mipmap.wifi ) Bitmap bitmap; |
@BindBool | 绑定真假boolean |
@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 |
@BindString | 绑定一个String id为一个String变量,@BindString( R.string.app_name ) String meg; |
写于2018-3-31
网友评论