ButterKnife与BindView使用详解
ButterKnife的优势
具有强大的view绑定和click事件处理能力
方便处理Adapter里的viewHolder绑定问题
运行时不会影响app效率,配置方便
代码清晰,可读性强、
使用方法以及注意事项:
在Activity中ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
在Fragment中ButterKnife.bind(this, view);
在Adapter中ButterKnife.bind(this, view);
属性布局不能使用private、static修饰
配置方法
先在application的gradle中加入//后内容
dependencies { classpath 'com.android.tools.build:gradle:3.2.0' // classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1' }
再在app的gradle中加入//后内容
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:28.0.0' testCompile 'junit:junit:4.12' // implementation 'com.jakewharton:butterknife:8.5.1' // annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' }
绑定注解
@BindView---->绑定一个view;id为一个view 变量 @BindView(R.id.tv_fm1) TextView tvFm1; @BindViews ---->绑定多个view;id为一个view的list变量 @BindViews({ R.id.btn1,R.id.btn2 }) List buttons; @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;
如下代码即使用@BindView和一个视图ID注释字段 ,Butter Knife自动找到并把相应的视图布局。
1 class ExampleActivity extends Activity { 2 @BindView(R.id.title) TextView title; 3 @BindView(R.id.subtitle) TextView subtitle; 4 @BindView(R.id.footer) TextView footer; 5 @Override public void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.simple_activity); 8 ButterKnife.bind(this); 9 } 10 }
上面代码相当于:
1 public void bind(ExampleActivity activity) { 2 activity.subtitle = (TextView) activity.findViewById(R.id.subtitle); 3 activity.footer = (TextView) activity.findViewById(R.id.footer); 4 activity.title = (extView) activity.findViewById(R.id.title); 5 }