簡介
ButterKnife是注解中相對簡單易懂的很不錯的開源架構,使用ButterKnife可以提升我們的開發效率,不需要寫很多findViewById來找到View對象,可以為我們省去很多的時間。
特點
1.強大的View綁定和Click事件處理功能,簡化代碼,提升開發效率
2.友善的處理Adapter裡的ViewHolder綁定問題
3.運作時不會影響APP效率,使用配置友善
4.代碼清晰,可讀性強
下載下傳位址:https://github.com/JakeWharton/butterknife
Butterknife插件:zelezny
插件安裝
在File->Setting->Plugins中輸入butterknife添加插件,然後重新開機AndroidStudio
插件使用
安裝完插件以後,需要重新開機Android Studio,重新開機完以後,我們隻需要把光标放到setContentView(R.layout.activity_main)上,然後alt+insert。對于多個需要綁定的id,省下了很多時間。我用一個gif動圖來說明一下怎麼使用吧
基本配置
1.在項目的project 的build.gredle 檔案中添加。
implementation 'com.jakewharton:butterknife:8.8.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.0'
2.ButterKnife的綁定
①在Activity中綁定ButterKnife
在Activity中的onCreate綁定ButterKnife,我覺得最好的方式是寫一個BaseActivity,在BaseActivity中完成綁定。在Activity中綁定ButterKnife必須在setContentView之後。使用ButterKnife.bind(this)進行綁定。具體實作代碼如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
②在Fragment中綁定ButterKnife
在Fragment中綁定ButterKnife的時候,需要在onCreateView中綁定,ButterKnife會傳回一個Unbinder的執行個體,在Fragment中綁定ButterKnife,必須在onDestroyView方法中調用unbind方法進行Fragment解綁,還有一點,在Fragment中綁定ButterKnife的使用,this不能換成getActivity,隻能用this,切記切記。使用ButterKnife.bind(this, view)進行綁定。代碼如下:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_item, null);
bind = ButterKnife.bind(this, view);
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
//解除綁定
bind.unbind();
}
③在adapter中綁定ButterKnife
我們還可以在adapter中綁定ButterKnife,我們在adapter的ViewHolder中使用,在ViewHolder中添加一個構造方法,在進行new的時候将view傳遞進去。使用ButterKnife.bind(this, view)進行綁定。代碼如下:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh=null;
if (convertView==null){
convertView= View.inflate(context,R.layout.activity_item,null);
vh=new ViewHolder(convertView);
convertView.setTag(vh);
}else{
vh= (ViewHolder) convertView.getTag();
}
vh.mIvPhoto.setImageResource(R.drawable.tupain);
vh.mTvResult.setText(mDatas.get(position));
return convertView;
}
class ViewHolder{
@BindView(R.id.iv_photo)
ImageView mIvPhoto;
@BindView(R.id.tv_result)
TextView mTvResult;
public ViewHolder(View view) {
ButterKnife.bind(this,view);
}
}
ButterKnife的基本使用
我們在這裡講一下ButterKnife的基本使用,這裡大體列舉一下,具體的使用方式大家可以去官方下載下傳看一下。
1.綁定View
①控件id注解:@BindView()
@BindView(R.id.tv_result)
public TextView mTvResult;
@BindView(R.id.iv_photo)
public ImageView mIvPhoto;
②布局中多個id注解:@BindViews()
public class MainActivity extends Activity {
@BindViews({ R2.id.button1, R2.id.button2, R2.id.button3})
public List<Button> listButton ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
listButton .get( 0 ).setText( "我是button1");
listButton .get( 1 ).setText( "我是button2 ");
listButton .get( 2 ).setText( "我是button3 ");
}
}
2.綁定資源
①綁定string字元串:@BindString()
@BindString(R.string.app_name)
public String appName;
②綁定array數組:@BindArray()
<string-array name="basketballStar">
<item>科比</item>
<item>杜蘭特</item>
<item>詹姆斯</item>
<item>庫裡</item>
<item>哈登</item>
</string-array>
@BindArray(R.array.basketballStar)
public String[] stars;
③綁定顔色值:@BindColor()
@BindColor(R.color.colorAccent)
public int color;
④綁定drawable:@BindDrawable
@BindDrawable(R.drawable.tupain)
public Drawable drawable;
3綁定監聽
我們這裡就講一下控件的監聽事件
綁定控件點選事件:@onClick()
@OnClick(R.id.btn_butterKnife_drawable)
public void gainPhoto(View view){
}
@onCheckedChanged監聽的使用
@OnCheckedChanged({R.id.rb_one,R.id.rb_two,R.id.rb_three})
public void OnCheckedChangeListener(CompoundButton view, boolean ischanged ){
switch (view.getId()) {
case R.id.rb_one:
if (ischanged){//注意:這裡一定要有這個判斷,隻有對應該id的按鈕被點選了,ischanged狀态發生改變,才會執行下面的内容
}
break;
case R.id.rb_two:
if (ischanged) {
}
break;
case R.id.rb_three:
if (ischanged) {
}
break;
default:
break;
}
}
更多綁定注解
還有很多綁定注解,我就不一一說明了,我們通過兩張圖檔來了解一下。
①綁定注解,視圖,資源等等,一共13個
②綁定事件,一共有12個事件監聽
ButterKnife的代碼混淆
在混淆檔案中,添加如下代碼:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
以上就是關于ButterKnife的基本使用,如果對你的學習有幫助的話,可以點個關注喲,大家一起學習,一起進步。
下載下傳
csdn:https://download.csdn.net/download/wen_haha/10898304
github:https://github.com/kongkongdaren/ButterKnifeDemo