Android 浅析 ButterKnife (一) 使用


前言

Linus Benedict Torvalds : RTFSC – Read The Fucking Source Code

概括

Field and method binding for Android views which uses annotation processing to generate boilerplate code for you.
ButterKnife是一个用注解的方式生成公式化的代码将Android view的域和方法绑定一起的库。

使用

Step 1 gradle

dependencies {    compile 'com.jakewharton:butterknife:7.0.1'}

在Gradle中添加butterknife库。

Step 2 Bind

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

这段代码是帮你简化我们平常书写繁琐的findViewById()操作,在代码实际编译中的时候会自动转换成我们熟悉的代码,例子中的代码在实际编译中会生成这些代码:

public void bind(ExampleActivity activity) {  activity.subtitle = (android.widget.TextView) activity.findViewById(2130968578);  activity.footer = (android.widget.TextView) activity.findViewById(2130968579);  activity.title = (android.widget.TextView) activity.findViewById(2130968577);}

资源的BINDING

在对资源的Bind方法中有许多不同的注解可以用:
@BindBool, @BindColor, @BindDimen, @BindDrawable, @BindInt, @BindString
这些可以帮你在资源使用前绑定资源的id。

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  // ...}

ButterKnife的简单实用方法就是这些了,非常简单,接下来我们深入的看看深入使用方法。

非Activity中使用

在非Activity中也可以同过绑定view 来实行绑定资源。

private void initFloatWinCollectPage() {    View view = findViewById(R.id.floatwin_collectpage_layout);    ButterKnife.bind(this, view);}

当然这种绑定也可以用在holder这些繁琐的操作上面,在getview的函数里不断的绑定view也只需要一个操作就实现了。

批量操作

// 方法一@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })List nameViews;// 方法二ButterKnife.apply(nameViews, DISABLE);ButterKnife.apply(nameViews, ENABLED, false);static final ButterKnife.Action DISABLE = new ButterKnife.Action() {  @Override public void apply(View view, int index) {    view.setEnabled(false);  }};static final ButterKnife.Setter ENABLED = new ButterKnife.Setter() {  @Override public void set(View view, Boolean value, int index) {    view.setEnabled(value);  }};

这两个方法都可以对资源进行批量操作,第一种是批量的赋值操作,第二种是对资源的批量显示或隐藏操作。
ButterKnife.apply(nameViews, View.ALPHA, 0.0f);
当然也可以对资源的属性进行操作了。

LISTENER 绑定

@OnClick(R.id.submit)public void submit(View view) {}@OnClick(R.id.submit)public void sayHi(Button button) {  button.setText("Hello!");}

通过绑定可以快速的将一个方法和控件联系在一起。

当然也可以将多个id绑定到一个方法里:

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })public void pickDoor(DoorView door) {  if (door.hasPrizeBehind()) {}   else {}}

BINDING RESET

在绑定取消的时候调用unbind方法
ButterKnife.unbind(this);

OPTIONAL BINDINGS

默认情况下,@Bind和监听绑定是必需的。如果目标视图不能找到一个异常将被抛出。
为了抑制这种行为,创造一个可选的绑定,添加注释@Nullable到方法最外边。
@Nullable @Bind(R.id.might_not_be_there) TextView mightNotBeThere;

总结

最后,要细看ButterKnife的代码应该直接看源码:
https://github.com/JakeWharton/butterknife

更多相关文章

  1. Android操作SD卡文件
  2. Android Post方法请求URL 迭代器
  3. Android: Performing Network Operations (网络操作)
  4. Android DEX方法超过64K和gradle编译OOM解决方案
  5. android 操作路由表
  6. Android下按扭的使用方法
  7. API 23及之后版本关于用android studio 中LocationManager的方法
  8. Android 桌面快捷方式操作
  9. android使用Intent操作拨打号码发送短信

随机推荐

  1. android 打包app,以及签名
  2. 自定义android Dialog
  3. Android 屏幕真实分辨率获取
  4. Android 对程序异常崩溃的捕捉
  5. 【Android】定位与解决anr错误记录
  6. Android:验证EditText输入框输入的手机号
  7. android activity之间传递bean类型数据
  8. Android APP开发集成工具
  9. Android View之组合控件实例(二)
  10. 蓝牙原理Android代码实现