天天看點

Android中ButterKnife的使用

簡介

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中ButterKnife的使用

插件使用

安裝完插件以後,需要重新開機Android Studio,重新開機完以後,我們隻需要把光标放到setContentView(R.layout.activity_main)上,然後alt+insert。對于多個需要綁定的id,省下了很多時間。我用一個gif動圖來說明一下怎麼使用吧

Android中ButterKnife的使用

基本配置

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個

Android中ButterKnife的使用

②綁定事件,一共有12個事件監聽

Android中ButterKnife的使用

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