ButterKnife的学习和使用

          最近去面试有不少公司都有问到这个框架,作为一个特老实的孩子,我也是没用过就老老实实地承认没用过。结果前两天在网上看了一下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下载地址为










猜你喜欢

转载自blog.csdn.net/shan286/article/details/69266106