前言
ButterKnife是控件注入框架,可以帮助安卓开发者省去初始化控件的重复性工作,简单快捷地初始化布局文件中的控件,极大地提升开发效率。
导入ButterKnife至项目中
在项目的build.gradle中添加依赖,然后同步项目,即可下载butterknife库至项目中
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:25.2.0'
//加入下面这两行代码
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
简单使用butterknife初始化控件
1.创建一个android工程,布局如下
2.在activity中的oncreate()方法里初始化butterknife框架
注意初始化要放在setView()之后
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butter_knife_test);
ButterKnife.bind(this);
}
3.查找TextView与Button
public class ButterKnifeTestActivity extends AppCompatActivity {
//绑定控件,省去了写findviewbyid的重复性操作
@BindView(R.id.tv_test1)
private TextView tvTest;
@BindView(R.id.btn_test1)
private Button btnTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butter_knife_test);
ButterKnife.bind(this);
}
}
4.测试控件是否被正确初始化
tvTest.setText("文本控件已被初始化");btnTest.setText("按钮被初始化");
意思是控件不能被声明为私有的或者是静态的,看来butterknife框架是对控件声明有限制的,将private去掉即可。
@BindView(R.id.tv_test1)
TextView tvTest;
@BindView(R.id.btn_test1)
Button btnTest;
5.给按钮设置点击监听事件
@OnClick(R.id.btn_test1)
public void onclick(View view){
btnTest.setText("我被点击了");
tvTest.setText("天若有情天亦老");
}
随便写一个方法,参数可以放View也可以不放任何参数,
在方法上一行注解OnClick即可绑定点击事件,注意该方法必须不能为private或者是static的,与声明时规则一致。
之前在主module中添加了butterknifte插件并构建异常的解决方案。
第一步:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
//删除前文中所说在工程的build.gradle中引入的插件
//classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
}
allprojects {
repositories {
jcenter()
}
}
第二步
apply plugin: 'com.android.application'
//在app.build删除下面这段代码
//apply plugin: 'com.jakewharton.butterknife'
第三步
将butterknife的依赖改为下述代码
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'