????????簡書第一篇講一下用的很普遍也很多人寫的ButterKnife!
? ??????不管是簡書還是其他博客上都很多人講述過ButterKnife的使用看蚜,這一點證明它確實被很多人喜歡也確實很有用蔼两。本來已經(jīng)足夠多的大神對他的論述了甩鳄,我確實不必在寫這樣的博客了。不過我本來就是菜鳥额划,我從今天開始寫博客是為了將我學(xué)到的東西做一個筆記妙啃,要是有同行看到那肯定是好了,要是能對看到的你有所幫助那更是我的榮慶了俊戳。
????????講述它的使用前先說為什么使用它彬祖?首先它是一個輕量級的框架,什么是輕量級框架品抽,什么是重量級框架呢储笑?我覺得是啟動程序需要的資源決定的,也就是說ButterKnife啟動程序所需的相對是比較少的圆恤,即使用Butterknife不會影響我們APP效率突倍,其次腔稀,大量地使用findViewById等確實是很繁瑣,一個活動(Activity)里的代碼量比較少的時候看上去不覺得有什么羽历,但是當(dāng)你代碼有幾百行的時候你就會發(fā)現(xiàn)代碼真的很臃腫焊虏,看上去很惡心。最后秕磷,ButterKnife不僅可以簡化我們的代碼量诵闭,提高開發(fā)效率,可讀性強澎嚣。
????????使用Butterknife必須得知道它的GitHub地址疏尿,要不然,隨便按照一些博客上的寫法導(dǎo)入易桃,不僅導(dǎo)入的不是最新版的還有可能導(dǎo)入不對或者不完整褥琐,同時還有一點,建議不要直接從Android Stuido的Dependencies導(dǎo)入晤郑,因為這樣導(dǎo)入往往會有bug----無法綁定點擊事件敌呈,這好像是8.4.0以前的問題,現(xiàn)在官網(wǎng)上更新了造寝,大家最好按照GitHub上導(dǎo)入磕洪,GitHub地址為:Butterknife ,我這里也寫一下如何導(dǎo)入:在app 的build.gradle诫龙,記住是app里的build.gradle析显,而不是項目的build.gradle
????????compile 'com.jakewharton:butterknife:8.8.1'
????????annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
? ? ????這是目前最新版的,記住要講annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'不可少赐稽,少了它不是不能用叫榕,而是無法綁定點擊事件,這也是為什么我剛才說不要直接從Android Stuido的Dependencies導(dǎo)入一樣姊舵。
綁定
????????我按照我個人來說晰绎,我喜歡在一個項目里面建一個BaseActivity,讓其他的Activity繼承我的這個BaseActivity括丁,我不是系統(tǒng)在帶的AppCompatActivity荞下,于是我就在我的BaseActivity里OnCreate綁定,一步搞定史飞,輕松尖昏,綁定代碼是ButterKnife.bind(this);
? ? ? ? 當(dāng)然你要是不像我這樣的話,在每一個Activity里的OnCreate綁定也是可以的构资,不可一定要切記抽诉,要在setContentView()后進行綁定,要不然可能會沒有效果吐绵。
? ? ? ? 這里還得講解一些在Fragment里的綁定使用迹淌,畢竟每個項目都有可能使用到Fragment河绽。是在onCreateView里綁定,綁定代碼是:ButterKnife.bind(this,rootView);
基本使用
? ? ? ? 1唉窃、對控件id的綁定耙饰,減少findViewById的使用,這里Activity與Fragment綁定無區(qū)別纹份,下文若是沒有特別提示就是沒有區(qū)別的苟跪,eg:
@BindView(R.id.tv) TextView tv;
@BindView(R.id.bt) Button bt;
@BindView(R.id.iv) ImageView iv;
? ? ? ? 2、對點擊事件的綁定蔓涧,這里是單個控件點擊事件件已。這里的方法命名沒有什么關(guān)系的,你想命名為什么都行蠢笋。
@OnClick(R.id.tv) void onClick(){
? ? ? ? //邏輯代碼
}
? ? ? ? 3拨齐、多個控件的點擊事件,其實和單個控件的點擊事件差不多
@OnClick({ R.id.tv,R.id.bt,R.id.iv}) void onClick(View view){? ? ? ?
? ? ? ? switch(){
? ? ? ? ? ? case R.id.tv:
? ? ? ? ? ? ? ? break:
????????????case R.id.tv:? ? ? ? ? ?
? ????????????? break:
????????????case R.id.tv:? ? ?
? ? ? ? ? ? ? ? ?break:
????????}
}
? ? ? ? 4鳞陨、EditText的事件監(jiān)聽昨寞,可以根據(jù)判斷s,即輸入文字來進行處理
@OnTextChanged(value?=?R.id.EditText,?callback?=?OnTextChanged.Callback.BEFORE_TEXT_CHANGED)??
????????????void?beforeTextChanged(CharSequence?s,?int?start,?int?count,?int?after)?{???
?}?
?@OnTextChanged(value?=?R.id.EditText,?callback?=?OnTextChanged.Callback.TEXT_CHANGED)??
????????????void?onTextChanged(CharSequence?s,?int?start,?int?before,?int?count)?{?
???}??
@OnTextChanged(value?=?R.id.EditText,?callback?=?OnTextChanged.Callback.AFTER_TEXT_CHANGED)??
????????????void?afterTextChanged(Editable?s)?{?
???}??
? ? ? ? Butterknife的使用肯定不會只有這么一點了厦滤,但是由于我的水平有限援岩,我就講那么多了,想要深入了解的看源碼是最有幫助的掏导,Butterknife的GitHub在文章開頭已經(jīng)給出了享怀,結(jié)尾在送上一個Butterknife的兄弟組合Zelezny控件。? ? ??
Zelezny插件的使用
在AndroidStudio->File->Settings->Plugins->搜索Zelezny下載添加就行 趟咆,可以快速生成對應(yīng)組件的實例對象添瓷,不用手動寫。使用時值纱,在要導(dǎo)入注解的Activity 或 Fragment 或 ViewHolder的layout資源代碼上鳞贷,右鍵——>Generate——Generate ButterKnife Injections,然后你會發(fā)現(xiàn)你在layout里的所有id都會被自動給你寫在你的Activity 或 Fragment上虐唠。