the latest ButterKnife and Android-Butterknife-Zelezny

这篇文章介绍ButterKnife及其配套的plugin —— Android-Butterknife-Zelezny的用法,基于最新版7.0.1官方文档

网上有大多数旧版本相关文章介绍,还是使用着@InjectView注解,而新版本则用@Bind关键字注解


使用@Bind 和 view ID 代替findViewByID :

class ExampleActivity extends Activity {
  @Bind(R.id.title) TextView title;
  @Bind(R.id.subtitle) TextView subtitle;
  @Bind(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

使用@Bind 和 resource ID 代替getResources().get... :
class ExampleActivity extends Activity {
  @BindString(R.string.title) String title;
  @BindDrawable(R.drawable.graphic) Drawable graphic;
  @BindColor(R.color.red) int red; // int or ColorStateList field
  @BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field
  // ...
}

可绑定到任意对象,但是需提供rootView方可对其子view使用注解:
public class FancyFragment extends Fragment {
  @Bind(R.id.button1) Button button1;
  @Bind(R.id.button2) Button button2;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    ButterKnife.bind(this, view);
    // TODO Use fields...
    return view;
  }
}

adapter中这样使用,ViewHolder实例化后自动执行findID操作:
public class MyAdapter extends BaseAdapter {
  @Override public View getView(int position, View view, ViewGroup parent) {
    ViewHolder holder;
    if (view != null) {
      holder = (ViewHolder) view.getTag();
    } else {
      view = inflater.inflate(R.layout.whatever, parent, false);
      holder = new ViewHolder(view);
      view.setTag(holder);
    }

    holder.name.setText("John Doe");
    // etc...

    return view;
  }

  static class ViewHolder {
    @Bind(R.id.title) TextView name;
    @Bind(R.id.job_title) TextView jobTitle;

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

List,相当于findID和add
@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })List<EditText> nameViews;

属性设置,如:设置view的透明度,第一个参数传入list
ButterKnife.apply(nameViews, View.ALPHA, 0.0f);

点击监听,方法名不需要与ID一样
@OnClick(R.id.submit)
public void submit(View view) {
  // TODO submit data to server...
}
若不需要对view进行处理,可简写为:
@OnClick(R.id.submit)
public void abc() {
  // TODO submit data to server...
}
多view监听的情况:
    @OnClick({ R.id.imageView1, R.id.imageView2 })
    public void onClick(View v) {
        if (v.getId() == R.id.imageView1) {
            Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "2", Toast.LENGTH_SHORT).show();
        }
    }

由于Fragment生命周期不同于Activity,所以需要解绑操作:
  @Override 
public void onDestroyView() {
    super.onDestroyView();
    ButterKnife.unbind(this);
  }

还有一些比较常用的方法
 @OnItemClick(R.id.list_view) void onItemSelected(int position) {}<pre name="code" class="java"> @OnItemSelected(R.id.list_view) void onItemSelected(int position) {}
等...其他的就由大家在具体使用的时候再发掘吧
使用:当前为7.0.1
GRADLE
compile 'com.jakewharton:butterknife:(insert latest version)'
混淆注意事项:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

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

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
这个库能大大减少我们编码的工作量,简化了赘余的代码,提高了我们的开发效率,但是"懒惰"的程序员们却还不满足,
少量的代码他们都希望由机器自动生成,于是便出现了与"黄油刀"配套的插件Android-Butterknife-Zelezny,这个插件
安装比较简单,直接在AS上面搜索安装重启即可使用,用法也很简单,直接在代码里对应的layoutID(如:R.layout.acitivity)
右键alt+insert召唤出插件集打开,选中需要的ID,然后确定,即可生成对应layout里的id所有注解和绑定代码,选中viewHolder,
则生成对应的viewHolder代码。
简单、方便、快捷!
gitHub上面有效果图,我就不传了。
地址:https://github.com/avast/android-butterknife-zelezny
完结。




 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值