butterknife8.4.0的配置使用以及在library中的使用

 1、导入依赖项:Project Structure→app→Dependencies→add→Library Dependence然后搜索ButterKnife导入对应的依赖。本文用的是8.4.0

2、Project的build.gradle文件中增加classpath内容:

dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //增加这一句butterknife
}

3、app的build.gradle文件中增加classpath内容:

	apply plugin: 'android-apt'
   dependencies {中增加

    compile 'com.jakewharton:butterknife:8.4.0'
//    compile 'com.jakewharton:butterknife-compiler:8.4.0'  //这句不能要,否则会有冲突
    apt 'com.jakewharton:butterknife-compiler:8.4.0'//增加这一句
然后点击“Sync Now”

4、将鼠标移到代码中的布局的位置,摁快捷键“Alt+Insert”弹出对话框,点击“Generate ButterKnife Injections”,选择相应的控件。


使用时注意:1.@BindView 变量名不能是 private 或 static

                        2.资源绑定时,@BindDrawable等只能放在类的成员变量中,不能放在方法中

                        3.Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind

                           .Fragment ButterKnife.bind(this, mRootView);

                        4.在Fragment中,由于与Activity的生命周期不同,有时需解绑ButterKnife

public void onDestroyView(){
  super.onDestroyView();
  ButterKnife.unbind(this);
}
 



资源绑定:

通过注解的方式,把资源绑定到对应变量上。需要传入资源的id,并且不同的资源类型要使用不同的注解

class ExampleActivity extends Activity {
    @BindString(R.string.title) String title;
    @BindDrawable(R.drawable.graphic) Drawable graphic;
    @BindColor(R.color.red) int red;
    @BindDimen(R.dimen.spacer) Float spacer; 
    // ...
}

例如:iv_collect.setImageResource(R.drawable.collect_pressed);
可以写成: @BindDrawable(R.drawable.collect_pressed) Drawable drawable;//写在类的成员变量中
  iv_collect.setImageDrawable(drawable);  //写在方法中

View列表

可以一次性将多个views绑定到一个List或数组中:

@Bind(R.id.first_name,R.id.middle_name,R.id.last_name)
List<EditText> nameViews;

点击事件注入

@OnClick(R.id.submit)
public void sayHi(Button button){
  button.setText("Hello");
}


多个控件具有相同的事件

@OnClick({ R.id.btn1, R.id.btn2, R.id.btn3 })

@OnClick({R.id.iv_left, R.id.tv_count, R.id.iv_right,R.id.iv_back})
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.iv_left:
            break;
        case R.id.tv_count:
            break;
        case R.id.iv_right:
            break;
        case R.id.iv_back:
            finish();
            break;
    }
}


可选绑定

默认情况下,@bind和监听器绑定都必须有一个目标view,当butter knife找不到对应的view时会抛出一个异常。为了防止这种异常情况的发生,可以在绑定的字段前面使用@Nullable注解,在绑定的方法前面则可使用@Option注解,来表明对应的是一个可选绑定。



ButterKnife基本使用(二)-在library中的使用

ButterKnife在最近一次更新8.2.1中刚刚支持在Library内部使用视图注入,只要R换成R2就好了。

在实际使用中遇到的问题: 

1.library 项目中使用butterknife时,R.id.iv_back,底下会有红线,提示“元素值必须为常量表达式”

原因:在一般的Android项目中,R类的常量都是用final定义的,但ADT 14之后,如果在library 项目中,它会没有final关键字,在这里要用R2.id.iv_back,用R2时,会提示“程序包R2不存在”,多rebuild几遍就行了。

2.在 library 项目中,有多个onclick点击事件,不能使用case R.id.iv_back,与上面报一样的错误,原因也同上。

     在switch语句的case中,如果使用 R.id.xxx 则会提示有问题,不允许非常量在case语句中。Google提供的一个方法就是把它转化为if-else语句,即在switch语句处 Ctrl+1 然后可以替换成if-else.语句。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值