Butterknife使用

ButterKnife是Android的View 注入框架,以前總通過findViewById來找到View對象,有了ButterKnife可以很輕鬆的省去這些步驟,最重要的一點是,使用ButterKnife對性能基本沒有損失,因爲ButterKnife用到的註解並不是在運行時反射的,而是在編譯的時候生成新的class。項目集成起來也是特別方便,使用起來也是特別簡單。
JakeWharton大神的github地址

配置編譯環境

./build.gradle

dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3'
    classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
}

./app/build.gradle

apply plugin: 'com.jakewharton.butterknife'
...
dependencies {
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

初始化佈局,調用 bind 方法初始化

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ButterKnife.bind(this);
}

用註解標註需要註解的對象

//綁定View
@BindView(R.id.name)AutoCompleteTextView mNameView;
//綁定資源
@BindString(R.string.show) String show;
//綁定事件
@OnClick(R.id.sign_in_button) void submitLogin() {
    attemptLogin();
}

基本使用

  • @BindView()
  • @BindViews()

    @BindViews({ R2.id.button1, R2.id.button2,  R2.id.button3})  
    public List<Button> buttonList
    
  • @BindString() ==> 綁定一個String id爲一個String變量

  • @BindArray() ==> 綁定string裏面array數組
  • @BindBitmap() ==> 綁定Bitmap 資源
  • @BindBool ==>綁定boolean值
  • @BindDimen ==>綁定Dimen
  • @BindDrawable ==> 綁定Drawable
  • @BindFloat ==>綁定float
  • @BindInt ==>綁定int
  • @BindColor()
  • @OnClick()

    • 指定多個id綁定事件

      @OnClick({R.id.id1, R.id.id2, R.id.id3, R.id.id4})  
      public void onViewClicked(View view) {  
      switch (view.getId()) {  
          case R.id.id1:  
              System.out.print("我是點擊事件1");  
              break;  
          case R.id.id2:  
              System.out.print("我是點擊事件2");  
              break;  
          case R.id.id3:  
              System.out.print("我是點擊事件3");  
              break;  
          case R.id.id4:  
              System.out.print("我是點擊事件4");  
              break;  
          }  
      } 
      
    • 單個綁定中指定多個id,用於公共事件處理

      @OnClick(R.id.id1,R.id.id2,R.id.id3)  
      public void sayHi(Button button) {//多個控件對應公共事件
        button.setText("Success!");  
      }  
      
  • @OnClick==>點擊事件

  • @OnCheckedChanged ==>選中,取消選中
  • @OnEditorAction ==>軟鍵盤的功能鍵
  • @OnFocusChange ==>焦點改變
  • @OnItemClick item ==>被點擊(注意這裏有坑,如果item裏面有Button等這些有點擊的控件事件的,需要設置這些控件屬性focusable爲false)
  • @OnItemLongClick item ==>長按(返回真可以攔截onItemClick)
  • @OnItemSelected ==>item被選擇事件
  • @OnLongClick ==>長按事件
  • @OnPageChange ==>頁面改變事件
  • @OnTextChanged ==>EditText裏面的文本變化事件
  • @OnTouch ==>觸摸事件
  • @Optional ==>選擇性注入,如果當前對象不存在,就會拋出一個異常,爲了壓制這個異常,可以在變量或者方法上加入一下註解,讓注入變成選擇性的,如果目標View存在,則注入, 不存在,則什麼事情都不做

    @Optional  
    @OnCheckedChanged(R.id.cb_test)  
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){  
        if(isChecked){  
            tvTest.setText("被選中...");  
        }else{  
            tvTest.setText("被取消...");  
        } 
    } 
    

混淆

-keep class butterknife.** { *; }  
-dontwarn butterknife.internal.**  
-keep class **$$ViewBinder { *; }  

-keepclasseswithmembernames class * {  
    @butterknife.* <fields>;  
}  

-keepclasseswithmembernames class * {  
    @butterknife.* <methods>;  
}  
發佈了90 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章