Butter Knife意思是“黄油小刀”,但是在Android社区中,它是由Square.Inc的大牛Jake Wharton设计的视图注入式库。Butter Knife 是一个专注于 Android 系统 View 的注入框架,让你从烦人的 findViewById 中解脱出来。同时还支持 View 的一些事件处理函数。项目地址:http://jakewharton.github.io/butterknife/
如果你不想写一大堆像下面这样的代码:
class ExampleActivity extends Activity { TextView title; TextView subtitle; TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); title = (TextView) findViewById(R.id.title); subtitle = (TextView) findViewById(R.id.subtitle); footer = (TextView) findViewById(R.id.footer); // TODO Use views... } }
使用 @InjectView 来注解字段,并为Butter Knife提供视图的id来查找和在转换布局中相应的视图。
class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... } }
不用担心Butter Knife会低效的放射机制,事实上会生成视图查找的代码。调用 inject 委托生成如下可以查看和调试的代码。
以上示例会差不多生成如下等价的代码:
public void inject(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); }
Butter Knife 的特性:
后面会慢慢介绍这些特性。
现代魔法 推荐于 2013-02-27 10:23