ButterKnife是目前经常使用的一种依托Java注解机制实现辅助代码生成的框架;用到了注解处理器。
它是一个专一于Android系统的View注入框架,将Android视图和回调方法绑定到成员变量和方法上;可视化一键生成;能够减小大量的findViewById以及setOnClickListener代码,是注解中相对简单易懂的开源框架 。html
一句话归纳:依赖注入框架,主要用于注解,减小代码。butterknife表面意思黄油刀java
导入android
一键生成资源idgit
该图引依凡王子的博客: www.cnblogs.com/zhengjunfei…github
英文使用说明地址:jakewharton.github.io/butterknife…c#
API文档地址:
jakewharton.github.io/butterknife…设计模式GitHub源码地址:
github.com/JakeWharton…数组
测试效果以下bash
1)在Activity 类中绑定 :ButterKnife.bind(this);微信
必须在setContentView();以后绑定;且父类bind绑定后,子类不须要再bind。
2)在非Activity 类(eg:Fragment、ViewHold)中绑定:
ButterKnife.bind(this,view);
这里的this不能替换成getActivity()。
3)activity中不须要解绑
在Activity中不须要作解绑操做,在Fragment 中必须在onDestroyView()中作解绑操做。
4)ButterKnife的修饰符
使用ButterKnife修饰的方法和控件,不能用private or static 修饰,不然会报错。
5)setContentView()不能经过注解实现。(其余的有些注解框架能够)
6)对于mvc设计模式
使用Activity为根视图绑定任意对象时,若是你使用相似MVC的设计模式你能够在Activity 调用ButterKnife.bind(this, activity),来绑定Controller。
7)子View的相关绑定
使用ButterKnife.bind(this,view)绑定一个view的子节点字段。若是你在子View的布局里或者自定义view的构造方法里 使用了inflate,你能够马上调用此方法。或者,从XML inflate来的自定义view类型能够在onFinishInflate回调方法中使用它。
8)修饰类型不能是:private 或者 static
不然会报错:错误:
@BindView fields must not be private or static. (com.ButterknifeActivity.button)复制代码
绑定颜色
@BindColor(android.R.color.background_dark)
@ColorInt
int whiteColor;复制代码
绑定View
@BindView(android.R.id.button3)
View button3;复制代码
@BindViews({R2.id.first_name, R2.id.middle_name, R2.id.last_name})
List<EditText> nameViews;复制代码
<string-array name="city">
<item>北京市</item>
<item>天津市</item>
<item>哈尔滨市</item>
<item>大连市</item>
<item>香港市</item>
</string-array>
@BindArray(R.array.city)
protected String [] mStrings;复制代码
绑定Bitmap 资源
复制代码
@OnClick---->点击事件
@OnCheckedChanged ---->选中,取消选中
注意这里有坑,若是item里面有Button等这些有点击 的控件事件的,须要设置这些控件属性focusable为false)复制代码
绑定多个OnCLick
@OnClick({R.id.view_test1,R.id.btn_s01,R.id.btn_s02})
public void onCLick1(View view){
switch (view.getId()){
case R.id.view_test1:
iv_f2.setImageBitmap(rabot);
break;
case R.id.btn_s01:
GetToast.useString(getActivity(),"按钮1");
break;
case R.id.btn_s02:
GetToast.useString(getActivity(),"按钮2");
break;
}
}复制代码
绑定listView的OnItemClick
@OnItemClick(R.id.lv_List)
public void OnItemClick(int index){
GetToast.useString(getActivity(),"this is OnItemClick the index :"+index);
}复制代码
绑定listView的OnItemLongClick
@OnItemLongClick(R.id.lv_List)
public boolean OnItemLongClick(int index){
GetToast.useString(getActivity(),"this is the OnItemLongClick index :"+index);
return true;
}复制代码
绑定ChexkBox的OnItemLongClick
@OnCheckedChanged(R.id.cb_cjeck)
public void OnCheckedChanged(boolean isChecked){
if(isChecked){
GetToast.useString(getActivity(),"选中了");
return ;
}
GetToast.useString(getActivity(),"没选中...");
}复制代码
单个绑定onClick事件
@OnClick(R.id.f1)
public void f1() {//动态添加Fragment
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
//transaction.add(R.id.fragment_container, fragment1);
transaction.replace(R.id.fragment_container,fragment1);
transaction.commit();
}
@OnClick( R.id.f2 )
public void f2(){
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment2 fragment2 = new Fragment2();
transaction.replace(R.id.fragment_container,fragment2);
// transaction.add(R.id.fragment_container, fragment2);
transaction.commit();
}复制代码
项目地址:
Glide框架你这样玩过吗—基于Glide4.0的弱网下进度加载图片
若是你以为此文对您有所帮助,微信公众号:终端研发部