Android ButterKnife框架的使用

Android ButterKnife是什么蛋铆?

Android ButterKnife是一個(gè)Android的依賴注入框架柏靶,它對(duì)應(yīng)的的git地址和官網(wǎng)如下:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沼琉,一起剝皮案震驚了整個(gè)濱河市舶沿,隨后出現(xiàn)的幾起案子席噩,更是在濱河造成了極大的恐慌挑秉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勋磕,死亡現(xiàn)場(chǎng)離奇詭異妈候,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)挂滓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門苦银,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人赶站,你說(shuō)我怎么就攤上這事幔虏。” “怎么了贝椿?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵想括,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我烙博,道長(zhǎng)瑟蜈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任渣窜,我火速辦了婚禮踪栋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘图毕。我一直安慰自己夷都,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布予颤。 她就那樣靜靜地躺著囤官,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛤虐。 梳的紋絲不亂的頭發(fā)上党饮,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音驳庭,去河邊找鬼刑顺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饲常,可吹牛的內(nèi)容都是我干的蹲堂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼贝淤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柒竞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起播聪,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤朽基,失蹤者是張志新(化名)和其女友劉穎布隔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稼虎,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衅檀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霎俩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哀军。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茸苇,靈堂內(nèi)的尸體忽然破棺而出排苍,到底是詐尸還是另有隱情沦寂,我是刑警寧澤学密,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站传藏,受9級(jí)特大地震影響腻暮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毯侦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一哭靖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侈离,春花似錦试幽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至洲胖,卻和暖如春济榨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绿映。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工擒滑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叉弦。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓丐一,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親淹冰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钝诚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容