最近去面试有不少公司都有问到这个框架,作为一个特老实的孩子,我也是没用过就老老实实地承认没用过。结果前两天在网上看了一下ButterKnife的用法,两个小时不到就搞懂了,所以说还是要多学习、多接触、多使用。趁热打铁,于是自己写了一个简单的demo吧,毕竟光看不练还是会有问题的,有些坑早踩晚踩都是踩。
首先是配置ButterKnife,这个相信大家都没有问题:
1、在项目的project 的build.gradle 文件中的dependencies标签下添加
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
2、在Module的build.gradle 文件中添加
apply plugin: 'android-apt'
3、在Module的build.gradle 文件中的dependencies标签中添加
compile 'com.jakewharton:butterknife:8.4.0' apt 'com.jakewharton:butterknife-compiler:8.4.0'然后再重新build一下项目,或者直接点击build.gradle文件右上方提示Sync Now。
接下来就可以使用ButterKnife了,这里我自己写了一个demo,为了方便查看它的实现代码,我在页面中间显示了它们的代码,也就是说当我们点击ImageView、TextView、Button或者其他组件时,相应的就可以看到那些代码了。
1、关于ImageView的绑定,这里就要提到两个ButterKnife中的绑定事件——@BindView()绑定控件和@BindBitmap()绑定图片:
@BindView(R.id.iv_prompt)
public ImageView ivPrompt;
@BindBitmap(R.mipmap.ic_launcher_round)
Bitmap bitmap;
ivPrompt.setImageBitmap(bitmap);把控件ID传入@BindView的括号里面进行控件绑定,把图片ID传进@BindBitmap的括号里面进行图片绑定。其实@BindView就相当于我们的findViewById,不过要注意的一点就是这里要用public来修饰ImageView。再给它加一个绑定事件——@OnClick(),看着是不是很眼熟,特别像我们以前用的setOnClickListener里面的onClick方法,不过要注意的是这里是大“O”,不是小“o”,代码如下:
@OnClick(R.id.iv_prompt) public void onClickBitmap() { tvTitles.get(1).setText("此处省略多行代码"); }上面的onClickBitmap其实就类似于我们以前的onClick()方法,但是比以前简单多了,可以说是省了不少重复琐碎的代码。
2、关于TextView的绑定,因为TextView我们通常要设置文字、文字颜色、文字大小,所以这里就要提到Butterknife的@BindString()绑定字符串、@BindColor()绑定颜色值和@BindDimen()绑定尺寸。另外我这个案例里面有标题和提示内容两个TextView,所以这里还要用到ButterKnife的@BindViews({})绑定多个相同类型的组件。
@BindViews({R.id.tv_title, R.id.tv_prompt}) public List<TextView> tvTitles; @BindString(R.string.app_name) String title; @BindColor(R.color.color_title) int titleColor; @BindDimen(R.dimen.text_size_8) int size8;
tvTitles.get(0).setText(title); tvTitles.get(0).setTextColor(titleColor); tvTitles.get(0).setTextSize(size8);在上面的代码中最需要最注意的一点就是@BindViews后面跟的是一个圆括号里面包了一个花括号,这样才能在里面写多个控件ID,此外对应的要用List把多个TextView装起来,使用的时候再根据它们的position来获得并进行处理。同样地,我也给标题对应的TextView加了一个@OnClick,这里就不细说了,和上面ImageView的使用方式一样。
3、关于Button的绑定,像Button我们一般也是给他绑定控件、文字等等,所以这块就不贴代码了。但是Button的话,大家可能会想到setOnLongClickListener。是的,Butterknife里面也有一个@OnLongClick和它相对应,奉上代码:
@OnLongClick(R.id.btn_right) public boolean onLongClickWarn() { tvTitles.get(1).setText("此处省略多行代码"); return true; }要特别注意的就是,这个方法要在最后一行加上return true。
4、除了上面这些,还有@BindArray,我这里也是写了四个Button放在页面的底部,然后把这个四个Button要显示的文字由这个绑定的数组中获取出来,并且也为他们分别绑定事件并写上响应方法,代码如下:
@BindViews({R.id.btn_main_one, R.id.btn_main_two, R.id.btn_main_three, R.id.btn_main_four}) public List<Button> btnBottomList; @BindArray(R.array.prompt_list) String[] promptList;
for (int i = 0; i < promptList.length; i++) { btnBottomList.get(i).setText(promptList[i]); }
@OnClick(R.id.btn_main_four) public void onClickBottomFour(){ onClickBottomBtn(); } private void onClickBottomBtn() { tvTitles.get(1).setText("此处省略几行代码"); }
好的,那么关于ButterKnife的学习和使用到这里就结束了,转载请注明,demo下载地址为