ButterKnife與BindView使用詳解
ButterKnife的優勢
具有強大的view綁定和click事件處理能力
方便處理Adapter里的viewHolder綁定問題
運行時不會影響app效率,配置方便
代碼清晰,可讀性強、
使用方法以及注意事項:
在Activity中ButterKnife.bind(this);必須在setContentView();之后,且父類bind綁定后,子類不需要再bind
在Fragment中ButterKnife.bind(this, view);
在Adapter中ButterKnife.bind(this, view);
屬性布局不能使用private、static修飾
配置方法
先在application的gradle中加入//后內容
dependencies { classpath 'com.android.tools.build:gradle:3.2.0' // classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1' }
再在app的gradle中加入//后內容
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:28.0.0' testCompile 'junit:junit:4.12' // implementation 'com.jakewharton:butterknife:8.5.1' // annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' }
綁定注解
@BindView---->綁定一個view;id為一個view 變量 @BindView(R.id.tv_fm1) TextView tvFm1; @BindViews ---->綁定多個view;id為一個view的list變量 @BindViews({ R.id.btn1,R.id.btn2 }) List buttons; @BindArray---->綁定string里面array數組; @BindArray(R.array.city ) String[] citys ; @BindBitmap---->綁定圖片資源為Bitmap; @BindBitmap(R.mipmap.wifi ) Bitmap bitmap; @BindBool ---->綁定boolean值 @BindColor ---->綁定color; @BindColor(R.color.colorAccent) int black; @BindDimen ---->綁定Dimen; @BindDimen(R.dimen.borth_width) int mBorderWidth; @BindDrawable ----> 綁定Drawable; @BindDrawable(R.drawable.test_pic) Drawable mTestPic; @BindFloat ---->綁定float @BindInt ---->綁定int @BindString ---->綁定一個String id為一個String變量; @BindString(R.string.app_name ) String meg;
如下代碼即使用@BindView和一個視圖ID注釋字段 ,Butter Knife自動找到並把相應的視圖布局。
1 class ExampleActivity extends Activity { 2 @BindView(R.id.title) TextView title; 3 @BindView(R.id.subtitle) TextView subtitle; 4 @BindView(R.id.footer) TextView footer; 5 @Override public void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.simple_activity); 8 ButterKnife.bind(this); 9 } 10 }
上面代碼相當於:
1 public void bind(ExampleActivity activity) { 2 activity.subtitle = (TextView) activity.findViewById(R.id.subtitle); 3 activity.footer = (TextView) activity.findViewById(R.id.footer); 4 activity.title = (extView) activity.findViewById(R.id.title); 5 }