Android ButterKnife是什么蛋铆?
Android ButterKnife是一個(gè)Android的依賴注入框架柏靶,它對(duì)應(yīng)的的git地址和官網(wǎng)如下:
- github地址:https://github.com/JakeWharton/butterknife
- 官網(wǎng):http://jakewharton.github.io/butterknife/
Android ButterKnife能解決什么問(wèn)題交播?
如果不使用依賴注入框架唐础,我們?cè)陂_發(fā)過(guò)程中
- 會(huì)寫到大量的findViewById來(lái)初始化view
- 會(huì)寫到大量Listener咧织,來(lái)監(jiān)聽View的各種操作事件,比如點(diǎn)擊滑動(dòng)等等
- 會(huì)寫到大量getResource方法來(lái)讀取資源文件
這些代碼簡(jiǎn)單重復(fù)胳施,而且代碼并不優(yōu)雅,ButterKnife提供了通過(guò)注解的方式坟比,來(lái)解決上面的這些問(wèn)題,讓我們的代碼更專注于業(yè)務(wù)的核心邏輯滤愕。
Android ButterKnife具體該怎么使用?
一怜校、導(dǎo)入依賴包
- IDE和構(gòu)建工具:androidstudio Gradle
- ButterKnife版本號(hào):8.6.0
找到gradle配置文件build.gradle(Module:app),注意是app的配置文件间影,然后在dependencies添加如下配置,然后如下圖所示點(diǎn)擊sync茄茁,重新下載并導(dǎo)入依賴的ButterKnife包
compile 'com.jakewharton:butterknife:(insert latest version)'
annotationProcessor 'com.jakewharton:butterknife-compiler:(insert latest version)'
二魂贬、綁定View
1. Activity中綁定view
ButterKnife可以通過(guò)BindView注解(最新版本,以前不同版本用的InjectView或Bind注解)進(jìn)行綁定View裙顽,來(lái)替代冗長(zhǎng)的findViewById代碼
@BindView(R.id.tx_hello) TextView tx_hello;
之后在設(shè)置好布局之后付燥,需要調(diào)用ButterKnife.bind(this)方法進(jìn)行綁定:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
tx_hello.setText("你好,中國(guó)");
}
2. Fragment中綁定view
同Activy的綁定愈犹,但是由于Fragment有不一樣的生命周期键科,當(dāng)在onCreateView中同過(guò)bind方法重綁定后,需要在onDestroyView方法中同過(guò)unbind方法解除綁定漩怎,調(diào)用詳細(xì)代碼如下
@BindView(R.id.tx_hello2)
TextView tx_hello2;
private Unbinder unbinder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_main, container, false);
unbinder = ButterKnife.bind(this, view);
tx_hello2.setText("你好中國(guó)2");
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
3. Adaptor中綁定view
Adaptor中經(jīng)常會(huì)用到ViewHolder勋颖,來(lái)進(jìn)行一些性能優(yōu)化,減少一些不必要的重復(fù)操作勋锤,同樣在ViewHolder也可以綁定View饭玲,詳細(xì)代碼如下
static class ViewHolder {
@BindView(R.id.tx_hello3)
TextView tx_hello3;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
4. 組合綁定多個(gè)View
ButterKnife可以通過(guò)BindViews將多個(gè)View綁定到一個(gè)組合中
@BindViews({ R.id.tx_hello, R.id.tx_nihao})
List<TextView> nameViews;
然后通過(guò)apply方法進(jìn)行View的組合操作
ButterKnife.apply(nameViews,INVISIBLE);
apply方法中的第二個(gè)參數(shù)是一個(gè)接口,這個(gè)接口需要自己實(shí)現(xiàn)
static final ButterKnife.Action<View> INVISIBLE = new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setVisibility(View.INVISIBLE);
}
}
三叁执、綁定事件
ButterKnife也可以綁定view上的各種事件茄厘,比如點(diǎn)擊事件,長(zhǎng)點(diǎn)擊事件等等谈宛,事件較多次哈,這里不一一介紹了,主要通過(guò)點(diǎn)擊事件吆录,長(zhǎng)點(diǎn)擊事件來(lái)說(shuō)明一下亿乳,具體代碼如下
@OnClick(R.id.btn_show)
public void click(View view) {
ButterKnife.apply(nameViews,INVISIBLE);
}
@OnLongClick(R.id.btn_show)
public boolean longclick(View view) {
ButterKnife.apply(nameViews,VISIBLE);
return true;
}
四、綁定資源
ButterKnife也可以綁定資源文件径筏,比如字符葛假,顏色等等搀矫,具體代碼如下
@BindString(R.string.hello_blank_fragment) String hello_blank_fragment;
@BindDrawable(R.drawable.ic_launcher)
Drawable ic_launcher;
@BindColor(R.color.colorAccent) int red; // int or ColorStateList field
@BindDimen(R.dimen.text_height) float text_height; // int (for pixel size) or float (for exact value) field
五编丘、ButterKnife Zelezny插件
通過(guò)安裝Androidstudio Plugins里面的Zelezny插件拗引,我們可以快速的產(chǎn)生ButterKnife代碼毕荐,具體請(qǐng)參考:http://blog.csdn.net/dreamlivemeng/article/details/51261170