版權全部,轉載請註明出處:linzhiyong https://www.jianshu.com/p/b1fc5b0e9e87 https://blog.csdn.net/u012527802/article/details/81059568android
ButterKnife是一個輕量級的註解框架,做用於Android視圖的字段和方法、資源的綁定。本文只作一些基本的舉例,讓沒接觸過ButterKnife的同窗能夠簡單粗暴的上手。
Github:https://github.com/JakeWharton/butterknife
ButterKnifeDemo傳送門:https://github.com/linzhiyong/ButterKnifeDemogit
Field and method binding for Android views which uses annotation processing to generate boilerplate code for you.github
Android視圖的字段和方法綁定,使用註釋處理生成樣板代碼。數組
AndroidStudio -> File -> Settings -> Plugins -> Browse repositories -> 搜索ButterKnife,找到Android ButterKnife Zeleany點擊Install,重啓AndroidStudio 。 bash
在build.gradle文件中添加:app
dependencies {
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
複製代碼
若是是在Library中使用ButterKnife,則須要在項目根目錄下的build.gradle中添加:框架
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
}
}
複製代碼
同時修改Libirary下的build.gradlemaven
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
複製代碼
註解名稱 | 註解說明 |
---|---|
@BindView | 綁定一個view,@BindView(R.id.listView1) ListView listView; |
@BindViews | 綁定多個view,@BindViews({R.id.textView1, R.id.textView2}) List viewList |
@BindAnim | 綁定一個動畫資源,@BindAnim(R.anim.anim_translate_1) Animation animation |
@BindArray | 綁定res/string.xml下的array數組,@BindArray(R.array.list) String[] array |
@BindBitmap | 綁定圖片資源爲Bitmap,@BindBitmap( R.mipmap.ic_launcher ) Bitmap iconBitmap |
@BindBool | 綁定boolean |
@BindColor | 綁定color,@BindColor(R.color.colorAccent) int colorAccent |
@BindDimen | 綁定Dimen,@BindDimen(R.dimen.width) int width |
@BindDrawable | 綁定Drawable@BindDrawable(R.drawable.ic_launcher_background) Drawable drawable |
@BindFloat | 綁定float |
@BindFont | 綁定font |
@BindInt | 綁定int |
@BindString | 綁定一個String,@BindString( R.string.app_name ) String appName |
註解名稱 | 註解說明 |
---|---|
@OnCheckedChanged | CheckBox 選中、取消選中事件綁定 |
@OnClick | view點擊事件 |
@OnEditorAction | 軟鍵盤的功能鍵 |
@OnFocusChange | EditText等 焦點改變事件 |
@OnItemClick | ListView、GridView等組件item點擊事件 |
@OnItemLongClick | ListView、GridView等組件item長按事件,返回類型boolean型,返回true能夠攔截onItemClick |
@OnItemSelected | Spinner item選擇事件 |
@OnLongClick | view 長按事件 |
@OnPageChange | ViewPager 頁面改變事件 |
@OnTextChanged | EditText 文本變化事件 |
@OnTouch | view 觸摸事件 |
@Optional | 可選綁定,默認狀況下,@bind和監聽器綁定都必須有一個目標view,當butter knife找不到對應的view時會拋出一個異常。爲了防止這種異常狀況的發生,能夠在綁定的字段前面使用@Nullable註解,在綁定的方法前面則可以使用@Option註解,來代表對應的是一個可選綁定。 |
private Unbinder unbinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
unbinder = ButterKnife.bind(this); // 返回一個Unbinder對象
}
@Override
protected void onDestroy() {
super.onDestroy();
if (unbinder != null) {
unbinder.unbind();
}
}
複製代碼
public class HomeFragment extends Fragment {
private Unbinder unbinder;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (unbinder != null) {
unbinder.unbind();
}
}
}
複製代碼
final class ViewHolder {
@BindView(R.id.nameView)
TextView nameView;
@BindView(R.id.ageView)
TextView ageView;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
複製代碼
// 綁定多view
@BindViews({R.id.textView1, R.id.textView2, R.id.textView3})
List<TextView> viewList;
// 單個綁定
@BindView(R.id.editText1)
EditText editText;
@BindView(R.id.listView1)
ListView listView;
複製代碼
鼠標選中R.layout.XXX -->> 右鍵 -->> 選擇Generate -->> 選擇Generate ButterKnife Injections -->> confirm完成ide
@BindString(R.string.app_name)
String appName;
@BindArray(R.array.list)
String[] array;
@BindBitmap(R.mipmap.ic_launcher)
Bitmap icon;
@BindColor(R.color.colorAccent)
int colorAccent;
@BindDimen(R.dimen.width)
int width;
@BindAnim(R.anim.anim_translate_1)
Animation translateAnimation;
複製代碼
// 綁定單個按鈕
@OnClick(R.id.button1)
public void onClick(View view) {
showToast("點擊了按鈕:" + view.toString());
}
// 綁定多個按鈕
@OnClick({R.id.button1, R.id.button2, R.id.button3})
public void onClickEx(View view) {
switch (view.getId()) {
case R.id.button1:
break;
case R.id.button2:
break;
case R.id.button3:
break;
}
}
@OnTouch(R.id.textView1)
public boolean onTouch(View view) {
showToast("touch:" + view.toString());
return true;
}
@OnFocusChange(R.id.editText1)
public void onFocusChange(View view, boolean flag) {
showToast("焦點改變...");
}
@OnItemClick(R.id.listView1)
public void onItemClickListener(int position) {
showToast("ListView點擊位置:" + position);
}
@OnItemLongClick(R.id.listView1)
public boolean onItemLongClickListener(int position) {
showToast("ListView長按位置:" + position);
return true;
}
@OnItemSelected(R.id.spinner1)
public void onItemSelectedClickListener(int position) {
showToast("Spinner選擇位置:" + position);
}
@OnItemSelected(value = R.id.spinner1, callback = OnItemSelected.Callback.NOTHING_SELECTED)
public void onNothingSelectedClickListener() {
showToast("Spinner未選擇item");
}
複製代碼