ButterKnife
是Android
之神JakeWharton
主导的IOC
框架。
ButterKnife
官网:http://jakewharton.github.io/butterknife
ButterKnife
在GitHub上的网址:https://github.com/JakeWharton/butterknife
先看看用传统的方法来写,声明控件:
package com.fpliu.newton;
public class XXActivity extends Activity {
private ImageTextView mOrgDoc;
private ImageTextView mVideo;
private ImageTextView mShare;
private ImageTextView mDiscuss;
private TextView m_tv_inform;
private TextView m_tv_news;
private ImageView m_iv_line;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mOrgDoc = (ImageTextView) findViewById(R.id.orgdoc);
mShare = (ImageTextView) findViewById(R.id.share);
mDiscuss = (ImageTextView) findViewById(R.id.discuss);
mVideo = (ImageTextView) findViewById(R.id.video_conference);
m_tv_inform = (TextView) findViewById(R.id.inform);
m_tv_news = (TextView) findViewById(R.id.news);
mListView = (ListView) findViewById(R.id.home_lv);
//TODO
}
}
再看看用ButterKnife
实现的同样的功能:
package com.fpliu.newton;
public class XXActivity extends Activity {
@BindView(R.id.orgdoc)ImageTextView orgdoc;
@BindView(R.id.share)ImageTextView share;
@BindView(R.id.discuss)ImageTextView discuss;
@BindView(R.id.video_conference)ImageTextView videoConference;
@BindView(R.id.inform)TextView inform;
@BindView(R.id.news)TextView news;
@BindView(R.id.home_lv)ListView homeLv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//TODO
}
}
看起来,代码量减少了不少,最重要的,这段代码根本不用我们开发者手写,可以用AndroidStudio
插件Zelezny自动生成。
总结起来,ButterKnife
的优势有如下:
Zelezny
是帮助开发者自动生成ButterKnife
注解的Android Studio
插件。
首先把光标放到R.layout.xxx
上,然后右键选择Generate...
,弹出如下选项:
选择Generate ButterKnife Injections
,弹出如下界面:
勾选要生成绑定的控件,而且还能自定义各个控件的名字,勾选后面的对应的OnClick
会生成OnClick
事件处理的代码,最后点击“Confirm
”,就生成了代码。
在单独使用ButterKnife 8.2.0
之前的版本的时候,有个限制,就是您的gradle
工程必须单模块的, 因为只有app
模块的R.id.xx
才是常量, 而其他子模块里的R.id.xx
并不是常量,导致在子模块中无法使用@InjectView
等注解, 也就无法使用ButterKnife
了。要解决这个问题,需要使用一个gradle
插件ButterCookie
。
ButterCookie
在GitHub上的网址:https://github.com/JackCho/ButterCookie
compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'