前言
介绍:Android开发 View注入 IOC框架
优点:
-
使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。
-
简化View绑定、Click事件处理功能、Adapter的ViewHolder绑定。
-
代码可读性强
Github:https://github.com/JakeWharton/butterknife
Doc:http://jakewharton.github.io/butterknife/
MyDocRepo(私人仓库备份):https://yankeyon.gitee.io/Doc/Butter%20Knife.htm
配置
AndroidStudio版本:v3.5
appSdk版本配置信息:
compileSdkVersion 28
defaultConfig {
applicationId "com.keyon.myhandler"
minSdkVersion 24
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
-
安装AS ButterKnife插件,提高开发效率。(安装后需重启IDE)
-
项目引入jar包
android { ... // Butterknife requires Java 8. compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'com.jakewharton:butterknife:10.2.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' }
-
add the plugin to your buildscript
buildscript { repositories { mavenCentral() google() } dependencies { classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.0' } }
-
apply it in your module
apply plugin: 'com.jakewharton.butterknife'
使用
-
右键布局文件 -> Generate...(Alt+Insert)
-
OnClick为是否生成点击事件函数,点击Confirm确认生成。
-
生成代码
@BindView(R.id.tv_item_content) TextView tvItemContent; @BindView(R.id.btn_show_menu) Button btnShowMenu; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick(R.id.btn_show_menu) public void onViewClicked() { }
其他
除了View绑定注解与事件点击注解外,还有其他注解。
@BindArray 绑定string里面array数组;@BindArray(R.array.city ) String[] citys ;
@BindBitmap 绑定图片资源为Bitmap;@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;
@BindString 绑定一个String id为一个String变量;@BindString( R.string.app_name ) String meg;
@BindColor 绑定color;@BindColor(R.color.colorAccent) int black;
@BindDimen 绑定Dimen;@BindDimen(R.dimen.borth_width) int mBorderWidth;
@BindDrawable 绑定Drawable;@BindDrawable(R.drawable.test_pic) Drawable mTestPic;
@BindFloat 绑定float
@BindInt 绑定int
@BindBool 绑定boolean值