ButterKnife入门教程

版权所有,转载请注明出处:linzhiyong https://www.jianshu.com/p/b1fc5b0e9e87 https://blog.csdn.net/u012527802/article/details/81059568

目录

  1. ButterKnife
  2. ButterKnife是什么,看一下Github上作者JakeWharton大神的介绍
  3. AndroidStudio集成ButterKnife插件和依赖
    3.1 插件集成
    3.2 添加依赖
  4. 开始使用
    4.1 13种绑定注解说明
    4.2 事件注解说明
    4.3 在Activity中使用
    4.4 在Fragment中使用
    4.5 在ViewHolder中使用
    4.6 绑定View
    4.6.1 手动绑定
    4.6.2 快捷键(插件)绑定
    4.7 绑定Drabable、Anim、Bitmap、String、Array、Dimen、Color
    4.8 绑定事件(点击、选择、长按、触摸等等事件)

1. ButterKnife

ButterKnife是一个轻量级的注解框架,作用于Android视图的字段和方法、资源的绑定。本文只做一些基本的举例,让没接触过ButterKnife的同学可以简单粗暴的上手。
Github:https://github.com/JakeWharton/butterknife
ButterKnifeDemo传送门:https://github.com/linzhiyong/ButterKnifeDemo

2. ButterKnife是什么,看一下Github上作者JakeWharton大神的介绍

Field and method binding for Android views which uses annotation processing to generate boilerplate code for you.

  1. Eliminate findViewById calls by using @BindView on fields.
  2. Group multiple views in a list or array. Operate on all of them at once with actions, setters, or properties.
  3. Eliminate anonymous inner-classes for listeners by annotating methods with @OnClick and others.
  4. Eliminate resource lookups by using resource annotations on fields.

Android视图的字段和方法绑定,使用注释处理生成样板代码。

  1. 在字段上使用@BindView消除findViewById调用。
  2. 将列表或数组中的多个视图分组。 使用操作,设置器或属性一次操作所有这些操作。
  3. 通过使用@OnClick和其他方法注释方法来消除侦听器的匿名内部类。
  4. 通过在字段上使用资源注释来消除资源查找。

3. AndroidStudio集成ButterKnife插件和依赖

3.1 插件集成

AndroidStudio -> File -> Settings -> Plugins -> Browse repositories -> 搜索ButterKnife,找到Android ButterKnife Zeleany点击Install,重启AndroidStudio 。

3.2 添加依赖

在build.gradle文件中添加:

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.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
复制代码

4 开始使用

4.1 13种绑定注解说明

注解名称注解说明
@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

4.2 事件注解说明

注解名称注解说明
@OnCheckedChangedCheckBox 选中、取消选中事件绑定
@OnClickview点击事件
@OnEditorAction软键盘的功能键
@OnFocusChangeEditText等 焦点改变事件
@OnItemClickListView、GridView等组件item点击事件
@OnItemLongClickListView、GridView等组件item长按事件,返回类型boolean型,返回true可以拦截onItemClick
@OnItemSelectedSpinner item选择事件
@OnLongClickview 长按事件
@OnPageChangeViewPager 页面改变事件
@OnTextChangedEditText 文本变化事件
@OnTouchview 触摸事件
@Optional可选绑定,默认情况下,@bind和监听器绑定都必须有一个目标view,当butter knife找不到对应的view时会抛出一个异常。为了防止这种异常情况的发生,可以在绑定的字段前面使用@Nullable注解,在绑定的方法前面则可使用@Option注解,来表明对应的是一个可选绑定。

4.3 在Activity中使用

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();
    }
}
复制代码

4.4 在Fragment中使用

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();
        }
    }
}
复制代码

4.5 在ViewHolder中使用

final class ViewHolder {

    @BindView(R.id.nameView)
    TextView nameView;

    @BindView(R.id.ageView)
    TextView ageView;

    ViewHolder(View view) {
        ButterKnife.bind(this, view);
    }

}
复制代码

4.6 绑定View

4.6.1 手动绑定
// 绑定多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;
复制代码
4.6.2 快捷键(插件)绑定

鼠标选中R.layout.XXX -->> 右键 -->> 选择Generate -->> 选择Generate ButterKnife Injections -->> confirm完成

4.7 绑定Drabable、Anim、Bitmap、String、Array、Dimen、Color

@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;
复制代码

4.8 绑定事件(点击、选择、长按、触摸等等事件)

// 绑定单个按钮
@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");
}
复制代码

转载于:https://juejin.im/post/5b4beff6e51d451984696d69

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值