Android ButterKnife使用总结

让程序猿的偷懒来的更猛烈些吧~(づ。◕‿‿◕。)づ

ButterKnife其实就是一个依托Java的注解机制来实现辅助代码生成的框架

首先我们来完成以下环境配置:

你需要拥有butterknife的jar包,或者你的网络环境优秀,可以让AS自动下载。

然后项目的lib目录下,在build.gradle文件中声明。(这里直接用了最新的8.8.1,注意annotationProcessor必须,否则这个版本找不到控件)


然后就可以愉快地使用ButterKnife,来使我们的代码更加优雅。

不过在介绍使用方法之前,需要在Activity的onCreate中绑定一下,就像这样:


常见的用法:

省去findViewById:

before:   TextViewtitleTv = (TextView)findViewById(R.id.actionbar_title);

after:    @BindView(R.id.actionvar_title) public TextViewtitleTv ;

绑定string里面array数组

<resources>
    <string name="app_name">WiFi管家</string>
    
    <string-array name="city">
        <item>厦门市</item>
        <item>福州市</item>
        <item>泉州市</item>
        <item>漳州市</item>
        <item>龙岩市</item>
    </string-array>
    
</resources>

@BindArray(R.array.city )  //绑定string里面array数组
String [] citys ;
......
button1.setText( citys[0] );

绑定Bitmap 资源

@BindBitmap( R.mipmap.wifi )  //绑定Bitmap 资源
public Bitmap wifi_bitmap ;
......
imageView.setImageBitmap( wifi_bitmap );

绑定color

@BindColor( R.color.colorAccent ) int black ;  //绑定一个颜色值
......
button.setTextColor(  black );

绑定string:

@BindString( R.string.app_name )  //绑定string 字符串
String msg;
......
button.setText(msg)


优化Adapter:

before:

private static class ViewHolder {
       private TextView tv;
}
after:
class ViewHolder {
        @BindView(R.id.tv_content)
        public TextView tv;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }

省略setOnClickListener:

before:

LinearLayout llytLeftArrow = (LinearLayout) findViewById(R.id.left_arrow_frame);
llytLeftArrow.setOnClickListener(new View.OnClickListener(){
	public void onClick(View v){
		……
	}
});
after:
@OnClick(R.id.left_arrow_frame)
public void loadOneDayAfter(){
	……
}

同理,可以省去onTouch,onItemLongClick,onItemClick……

同时,你可以一次指定多个id,为多个View绑定同一个事件。

@OnClick({R.id.id1,R.id.id2,R.id.id3})
public void doSomething (){
	……
}

对一View进行统一处理:

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

static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {  
	@Override public void apply(View view, int index) {  
    		view.setEnabled(false);  //统一操作的具体内容
  	}  
};  
static final ButterKnife.Setter<View, Boolean> ENABLED = new ButterKnife.Setter<View, Boolean>() {  
 	 @Override public void set(View view, Boolean value, int index) {  
    		view.setEnabled(value);  
  	}  
};  

ButterKnife.apply(nameViews, DISABLE);  
ButterKnife.apply(nameViews, ENABLED, false);  

多方法的listener:

before:

titleTv.addTextChangedListener(new TextWatcher() {    
@Override    
public void beforeTextChanged(CharSequence s, int start, int count, int after) {    }    
@Override    
public void onTextChanged(CharSequence s, int start, int before, int count) {    }    
@Override    
public void afterTextChanged(Editable s) {    }}
);
after:

@OnTextChanged(value = R.id.titleTv, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)  
void afterTextChanged(Editable s) {  
  
} 
  

插件安装:


插件安装之后,setContentView(R.layout.MainActivity)右键选择Generate


在面板里面选择要生成的控件。


使用心得:

1.Activity ButterKnife.bind(this);必须在setContentView();之后

2.Fragment使用ButterKnife.bind(this,view);

3.属性布局不能用privateor static修饰,否则会报错o(︿+)o(参考:http://www.cnblogs.com/bugly/p/5680517.html)

4.setContentView()不能通过注解实现。

5.由于所有的注解都会在ButterKnife.bind(this)后开始,所以如果绑定牵扯逻辑顺序问题,不要使用ButterKnife

6.就减少代码行数来看,一些情况下可以不使用ButterKnife

findViewById(R.id.xxx).setVisbility(View.GONE);(只是用一次)

((TextView)findViewById(R.id.actionbar_title)).setText(R.string.str_btn_login);

减少不必要的全局变量


github:https://github.com/JakeWharton/butterknife


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值