前言

  • ButterKnife 简介

    ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。

项目github地址:https://github.com/JakeWharton/butterknife

  • ButterKnife 优势

    1、强大的View绑定和Click事件处理功能,简化代码,提升开发效率
    2、方便的处理Adapter里的ViewHolder绑定问题
    3、运行时不会影响APP效率,使用配置方便
    4、代码清晰,可读性强

如何添加依赖

  • 在项目的project 的build.gredle 文件中的dependencies标签下添加。

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

例如:

buildscript {
repositories {
jcenter()
} dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
} allprojects {
repositories {
jcenter()
}
} task clean(type: Delete) {
delete rootProject.buildDir
}
  • 在module的build.gredle 文件中添加

    apply plugin: 'android-apt'

  • 在module的build.gredle 文件中的dependencies标签中添加

    compile 'com.jakewharton:butterknife:8.4.0'
    apt 'com.jakewharton:butterknife-compiler:8.4.0'

例如

apply plugin: 'com.android.application'
apply plugin: 'android-apt' android {
compileSdkVersion 24
buildToolsVersion "24.0.3" defaultConfig {
applicationId "com.zyj.wifi"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}

如何使用

  • 控件id 注解: @BindView()
package com.dl.ButterKnifeDemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button; import butterknife.BindView;
import butterknife.ButterKnife; public class ButterknifeActivity extends AppCompatActivity { @BindView( R.id.button1 )
public Button button1 ; // 注意:button 的修饰类型不能是:private 或者 static 。 否则会报错:错误: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1) @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butterknife);
//绑定activity
ButterKnife.bind( this ) ; button1.setText( "I am a button ");
}
}
  • 多个控件id 注解: @BindViews()
package com.dl.ButterKnifeDemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import java.util.List;
import butterknife.BindViews;
import butterknife.ButterKnife; public class Main2Activity extends AppCompatActivity { @BindViews({ R.id.button1 , R.id.button2 , R.id.button3 })
public List<Button> buttonList ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2); ButterKnife.bind(this); buttonList.get( 0 ).setText( "hello 1 ");
buttonList.get( 1 ).setText( "hello 2 ");
buttonList.get( 2 ).setText( "hello 3 ");
}
}
  • fragment 使用
package com.dl.ButterKnifeDemo;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button; import butterknife.BindView;
import butterknife.ButterKnife; public class ButterknifeFragment extends Fragment { @BindView( R.id.button1 )
public Button button1 ; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_butterknife, container, false); //绑定fragment
ButterKnife.bind( this , view ) ;
button1.setText( "I am a button ");
return view ;
}
}
  • @BindString() :绑定string 字符串
package com.dl.ButterKnifeDemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button; import butterknife.BindString;
import butterknife.BindView;
import butterknife.ButterKnife; public class ButterknifeActivity extends AppCompatActivity { @BindView( R.id.button1 ) //绑定button 控件
public Button button1 ; @BindString( R.string.app_name ) //绑定string 字符串
String meg; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butterknife); //绑定activity
ButterKnife.bind( this ) ; button1.setText( meg );
}
}
  • @BindArray() : 绑定string里面array数组
<resources>
<string name="app_name">WiFi管家</string> <string-array name="city">
<item>厦门市</item>
<item>福州市</item>
<item>泉州市</item>
<item>漳州市</item>
<item>龙岩市</item>
</string-array> </resources> package com.dl.ButterKnifeDemo; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button; import butterknife.BindArray;
import butterknife.BindView;
import butterknife.ButterKnife; public class ButterknifeActivity extends AppCompatActivity { @BindView( R.id.button1 ) //绑定button 控件
public Button button1 ; @BindArray(R.array.city ) //绑定string里面array数组
String [] citys ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butterknife); //绑定activity
ButterKnife.bind( this ) ; button1.setText( citys[0] );
}
}
  • @BindBitmap( ) : 绑定Bitmap 资源
package com.dl.ButterKnifeDemo;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView; import butterknife.BindBitmap;
import butterknife.BindView;
import butterknife.ButterKnife; public class ButterknifeActivity extends AppCompatActivity { @BindView( R.id.imageView ) //绑定ImageView 控件
public ImageView imageView ; @BindBitmap( R.mipmap.wifi ) //绑定Bitmap 资源
public Bitmap wifi_bitmap ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butterknife); //绑定activity
ButterKnife.bind( this ) ; imageView.setImageBitmap( wifi_bitmap );
}
}
  • @BindColor( ) : 绑定一个颜色值
package com.dl.ButterKnifeDemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button; import butterknife.BindColor;
import butterknife.BindView;
import butterknife.ButterKnife; public class ButterknifeActivity extends AppCompatActivity { @BindView( R.id.button1 ) //绑定一个控件
public Button button1 ; @BindColor( R.color.colorAccent ) int black ; //绑定一个颜色值 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butterknife); //绑定activity
ButterKnife.bind( this ) ; button1.setTextColor( black ); }
}
  • @OnClick( ) : 绑定控件点击事件
  • @OnLongClick( ) : 绑定控件长按事件
package com.dl.ButterKnifeDemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast; import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnLongClick; public class ButterknifeActivity extends AppCompatActivity { @OnClick(R.id.button1 ) //给 button1 设置一个点击事件
public void showToast(){
Toast.makeText(this, "is a click", Toast.LENGTH_SHORT).show();
} @OnLongClick( R.id.button1 ) //给 button1 设置一个长按事件
public boolean showToast2(){
Toast.makeText(this, "is a long click", Toast.LENGTH_SHORT).show();
return true ;
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_butterknife); //绑定activity
ButterKnife.bind( this ) ; }
}
  • zelezny : Butterknife插件的使用

    插件的安装

插件的使用

安装完成插件后,会提示重启AS,重启完后,可以写一个布局并且新建一个代码类测试下。测试的过程中要注意的是,需要将光标移到setContentView(R.layout.acty_login),将光标放到R.layout.acty_login,然后右键Generate就有了。要注意一定要将光标放在R.layout.acty_login上面。

这里需要注意的是在勾选控件的界面上,有一个CreateViewHolder , 很明显这个是专门为ListView或者RecyclerView的适配器专门提供的。

笔  者:MysticCoder
关于作者:专注于移动端开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!

Android注解利器:ButterKnife 的基本使用的更多相关文章

  1. Android 注解工具 ButterKnife

    Butter Knife 是 Android 视图字段和方法绑定,使用注解处理来生成样板代码. 主要特性: 在字段使用 @FindView消除findViewById调用 使用 @FindViews在 ...

  2. Android注解神器 ButterKnife框架

    前言: 本人是一个只有几个月工作经验的码小渣.这是我写的第一篇博客,如有不足之处还请大家不要介意,还请大佬可以指出问题. 在这几个月的实战开发中自己也遇到了很多问题,真的是举步艰难啊!!! 在实战开发 ...

  3. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  4. Android注解使用之ButterKnife 8.0注解使用介绍

    前言: App项目开发大部分时候还是以UI页面为主,这时我们需要调用大量的findViewById以及setOnClickListener等代码,控件的少的时候我们还能接受,控件多起来有时候就会有一种 ...

  5. Android学习笔记- ButterKnife 8.0注解使用介绍

    前言: App项目开发大部分时候还是以UI页面为主,这时我们需要调用大量的findViewById以及setOnClickListener等代码,控件的少的时候我们还能接受,控件多起来有时候就会有一种 ...

  6. Android注解框架实战-ButterKnife

    文章大纲 Android注解框架介绍 ButterKnife实战 项目源码下载   一.框架介绍 为什么要用注解框架?  在Android开发过程中,我们经常性地需要操作组件,操作方法有findVie ...

  7. Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

    不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...

  8. 开发自己的山寨Android注解框架

    目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...

  9. Android注解使用之使用Support Annotations注解优化代码

    前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...

随机推荐

  1. method=“post/get”

    Form表单中method="post/get'的区别   Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据 ...

  2. OC - 24.CABasicAnimation

    概述 简介 CABasicAnimation是抽象类CAPropertyAnimation的子类,可以直接使用 CABasicAnimation又称基本动画,从fromValue到toValue按照指 ...

  3. style currentStyle getComputedStyle的区别和用法

    先介绍下层叠样式表的三种形式: 1.内联样式,在html标签中style属性设置. <p style="color:#f90">内联样式</p> 2.嵌入样 ...

  4. Python:运算符

    #!/usr/bin/python3 #运算符 #算术运算符 print("算术运算符:","+ - * / % **(幂) //(取整)") #比较运算符 p ...

  5. 解决办法:CMake编译时出现“error in configuration process project files may be invalid”

    无论是CMake2.84 还是当前最新的CMake2.87都可能会出现这种错: 查遍国内外的网上都没有给出可行办法,结果还是自己解决了 现把出错原因和解决办法如下:出错原因:因是英文版本,通常安装没有 ...

  6. C++中的static关键字的总结 (转载)

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

  7. ios开发之xcode6中如何添加pch全局引用文件

    xcode6中去掉了默认添加pch文件,这就需要我们自己手动添加pch文件了,添加pch文件是为了一些琐碎的头文件引用,加快编译速度! 下面就说下该如何手动添加pch文件: 1.添加一个文件,在oth ...

  8. TatukGIS - GisDefs - CreateMSJET 函数

    函数名称  CreateMSJET 所在单元  GisDefs 函数原型           function CreateMSJET(const _path: String): String;   ...

  9. BZOJ 1021 循环的债务

    Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题.不过,鉴别钞票的真伪是一件很麻烦的事情,于是他们决定要在清还债务的 ...

  10. 【Java】java的内存浅析

    一.闲谈下 201407月记着那时候身体垮了下来,呵呵.想说,对自己的说,也是对大家的负责吧.那时候胸疼胸闷,然后几乎累垮了,我还坚持了一星期,那一星期真的迷迷糊糊.完全不能看代码,看代码就晕.一直想 ...