ButterKnife的官方项目的地址:https://github.com/JakeWharton/butterknife
ButterKnife的使用说明:http://jakewharton.github.io/butterknife/
ButterKnife的API文档:http://jakewharton.github.io/butterknife/javadoc/
ButterKnife由国外的jakewharton大神写的,主要作用是注入View获取控件的Id,以此减小代码的编写量。
以下只介绍在模块化的Library中的使用:
首先在Android Studio的Plugins下搜索
image.png
点击安装,然后重启Android Studio
1.在project的build.gradle下添加如下代码:
buildscript {
repositories {
google()
jcenter()
jcenter {
url "http://jcenter.bintray.com/"
}
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
ButterKnife最新的版本是10.2.0,添加这个版本需要兼容android.x,我的项目暂时没有兼容Android.x所以我添加的是9.0.0。ButterKnife的版本不能低于8.4.0(包含8.4.0),实际上我在我的项目中添加8.5.1和8.8.1都不行。
2.在最底层的library的build.gradle里边添加:
apply plugin: 'com.jakewharton.butterknife'
在dependencies下添加ButterKnife的依赖:
api rootProject.ext.dependencies["butterKnife0"]
annotationProcessor rootProject.ext.dependencies["butterKnife1"]
这里我使用了依赖的同一版本管理,其中这里ButterKnife的版本对应的是8.8.1
3.在module的build.gradle的dependencies下添加ButterKnife的依赖:
annotationProcessor rootProject.ext.dependencies["butterKnife1"]
以上的版本管理等同于以下的:
com.jakewharton:butterknife:8.8.1;
com.jakewharton:butterknife-compiler:8.8.1;
同步sync now即可:注意:其中在Library中除了onViewClicked()方法体中的控件id的R不是R2,其他的地方全部是R2来获取控件id,原因是Libraray下的R需要时常量,而之前版本的ButterKnife时没有兼容这点,后来的版本加如了R2来兼容。而在Library以外的地方还是正常给使用!
在Activity中的使用:
public class UserActivity extends AppCompatActivity{
@BindView(R.id.toolbar_title)
TextView toolbarTitle;
@BindView(R.id.backBtn)
AppCompatImageView backBtn;
@BindView(R.id.searchUserBtn)
AppCompatTextView searchUserBtn;
@BindView(R.id.userList)
RecyclerView userList;
@BindView(R.id.fab)
FloatingActionButton fab;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
ButterKnife.bind(this);
}
}
ButterKnife.bind(this);必须在设置布局View之后。鼠标放到R.layout.xxx上,按Alt+Insert键,点击下图红色选项即可。
image.png
弹出下面的弹窗,选择你要进行的操作即可:
image.png
其中ButterKnife.bind(this);可以写在BaseActivity中,子类中就不用再写
在Fragment中的使用
在onCreateView()方法中调用 unbinder = ButterKnife.bind(this, mView);返回一个Unbinder unbinder对象,在onDestroyView()方法中调用unBinder.unbind();方法解绑;其他通Activity中的用法。相关更多Api请查看官方文档!
网友评论