懒人快速开发框架ButterKnif8.4.0

前言

由于之前开发时用的ButterKnife的框架时7.XX的今天整理了一下框架8.0以上的知识!(文章suo来的)

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'
例如:

  1. <span style="font-size:18px;">buildscript {  
  2.     repositories {  
  3.         jcenter()  
  4.     }  
  5.   
  6.     dependencies {  
  7.         classpath 'com.android.tools.build:gradle:2.2.2'  
  8.         classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'  
  9.     }  
  10. }  
  11.   
  12. allprojects {  
  13.     repositories {  
  14.         jcenter()  
  15.     }  
  16. }  
  17.   
  18. task clean(type: Delete) {  
  19.     delete rootProject.buildDir  
  20. }</span>  

在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'

例如

  1. <span style="font-size:18px;">apply plugin: 'com.android.application'  
  2. apply plugin: 'android-apt'  
  3.   
  4. android {  
  5.     compileSdkVersion 24  
  6.     buildToolsVersion "24.0.3"  
  7.   
  8.     defaultConfig {  
  9.         applicationId "com.zyj.wifi"  
  10.         minSdkVersion 14  
  11.         targetSdkVersion 24  
  12.         versionCode 1  
  13.         versionName "1.0"  
  14.     }  
  15.     buildTypes {  
  16.         release {  
  17.             minifyEnabled false  
  18.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  19.         }  
  20.     }  
  21. }  
  22.   
  23. dependencies {  
  24.     compile fileTree(dir: 'libs', include: ['*.jar'])  
  25.       
  26.     compile 'com.jakewharton:butterknife:8.4.0'  
  27.     apt 'com.jakewharton:butterknife-compiler:8.4.0'  
  28. }</span>  

如何使用

控件id 注解: @BindView()

  1. <span style="font-size:18px;">package com.zyj.wifi;  
  2.   
  3. import android.support.v7.app.AppCompatActivity;  
  4. import android.os.Bundle;  
  5. import android.widget.Button;  
  6.   
  7. import butterknife.BindView;  
  8. import butterknife.ButterKnife;  
  9.   
  10. public class ButterknifeActivity extends AppCompatActivity {  
  11.   
  12.     @BindView( R.id.button1 )  
  13.     public Button button1 ;  
  14.       
  15.     // 注意:button 的修饰类型不能是:private 或者 static 。 否则会报错:错误: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1)  
  16.   
  17.     @Override  
  18.     protected void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.activity_butterknife);  
  21.         //绑定activity  
  22.         ButterKnife.bind( this ) ;  
  23.   
  24.         button1.setText( "I am a button ");  
  25.     }  
  26. }</span>  

多个控件id 注解: @BindViews()

  1. <span style="font-size:18px;">package com.zyj.wifi;  
  2.   
  3. import android.support.v7.app.AppCompatActivity;  
  4. import android.os.Bundle;  
  5. import android.widget.Button;  
  6. import java.util.List;  
  7. import butterknife.BindViews;  
  8. import butterknife.ButterKnife;  
  9.   
  10. public class Main2Activity extends AppCompatActivity {  
  11.   
  12.     @BindViews({ R.id.button1  , R.id.button2 ,  R.id.button3 })  
  13.     public List<Button> buttonList ;  
  14.   
  15.     @Override  
  16.     protected void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.activity_main2);  
  19.   
  20.         ButterKnife.bind(this);  
  21.   
  22.         buttonList.get( 0 ).setText( "hello 1 ");  
  23.         buttonList.get( 1 ).setText( "hello 2 ");  
  24.         buttonList.get( 2 ).setText( "hello 3 ");  
  25.     }  
  26. }</span>  

fragment 使用

  1. <span style="font-size:18px;">package com.zyj.wifi;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v4.app.Fragment;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.Button;  
  9.   
  10. import butterknife.BindView;  
  11. import butterknife.ButterKnife;  
  12.   
  13. public class ButterknifeFragment extends Fragment {  
  14.   
  15.     @BindView( R.id.button1 )  
  16.     public Button button1 ;  
  17.   
  18.     @Override  
  19.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  20.                              Bundle savedInstanceState) {  
  21.         View view = inflater.inflate(R.layout.fragment_butterknife, container, false);  
  22.   
  23.         //绑定fragment  
  24.         ButterKnife.bind( this , view ) ;  
  25.         button1.setText( "I am a button ");  
  26.         return view ;  
  27.     }  
  28. }</span>  

@BindString() :绑定string 字符串

  1. <span style="font-size:18px;">package com.zyj.wifi;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.widget.Button;  
  6.   
  7. import butterknife.BindString;  
  8. import butterknife.BindView;  
  9. import butterknife.ButterKnife;  
  10.   
  11. public class ButterknifeActivity extends AppCompatActivity {  
  12.   
  13.     @BindView( R.id.button1 ) //绑定button 控件  
  14.     public Button button1 ;  
  15.   
  16.     @BindString( R.string.app_name )  //绑定string 字符串  
  17.     String meg;  
  18.   
  19.     @Override  
  20.     protected void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.activity_butterknife);  
  23.   
  24.         //绑定activity  
  25.         ButterKnife.bind( this ) ;  
  26.   
  27.         button1.setText( meg );  
  28.     }  
  29. }</span>  

@BindArray() : 绑定string里面array数组

  1. package com.zyj.wifi;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.widget.Button;  
  6.   
  7. import butterknife.BindArray;  
  8. import butterknife.BindView;  
  9. import butterknife.ButterKnife;  
  10.   
  11. public class ButterknifeActivity extends AppCompatActivity {  
  12.   
  13.     @BindView( R.id.button1 ) //绑定button 控件  
  14.     public Button button1 ;  
  15.   
  16.     @BindArray(R.array.city )  //绑定string里面array数组  
  17.     String [] citys ;  
  18.   
  19.     @Override  
  20.     protected void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.activity_butterknife);  
  23.   
  24.         //绑定activity  
  25.         ButterKnife.bind( this ) ;  
  26.   
  27.         button1.setText( citys[0] );  
  28.     }  
  29. }  

@BindBitmap( ) : 绑定Bitmap 资源

  1. <span style="font-size:18px;">package com.zyj.wifi;  
  2.   
  3. import android.graphics.Bitmap;  
  4. import android.os.Bundle;  
  5. import android.support.v7.app.AppCompatActivity;  
  6. import android.widget.ImageView;  
  7.   
  8. import butterknife.BindBitmap;  
  9. import butterknife.BindView;  
  10. import butterknife.ButterKnife;  
  11.   
  12. public class ButterknifeActivity extends AppCompatActivity {  
  13.   
  14.     @BindView( R.id.imageView ) //绑定ImageView 控件  
  15.     public ImageView imageView ;  
  16.   
  17.     @BindBitmap( R.mipmap.wifi )  //绑定Bitmap 资源  
  18.     public Bitmap wifi_bitmap ;  
  19.   
  20.     @Override  
  21.     protected void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.activity_butterknife);  
  24.   
  25.         //绑定activity  
  26.         ButterKnife.bind( this ) ;  
  27.   
  28.         imageView.setImageBitmap( wifi_bitmap );  
  29.     }  
  30. }</span>  

@BindColor( ) : 绑定一个颜色值

  1. <span style="font-size:18px;">package com.zyj.wifi;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.widget.Button;  
  6.   
  7. import butterknife.BindColor;  
  8. import butterknife.BindView;  
  9. import butterknife.ButterKnife;  
  10.   
  11. public class ButterknifeActivity extends AppCompatActivity {  
  12.   
  13.     @BindView( R.id.button1 )  //绑定一个控件  
  14.     public Button button1 ;  
  15.   
  16.     @BindColor( R.color.colorAccent ) int black ;  //绑定一个颜色值  
  17.   
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.activity_butterknife);  
  22.   
  23.         //绑定activity  
  24.         ButterKnife.bind( this ) ;  
  25.   
  26.         button1.setTextColor(  black );  
  27.   
  28.     }  
  29. }</span>  

@OnClick( ) : 绑定控件点击事件

@OnLongClick( ) : 绑定控件长按事件

  1. <span style="font-size:18px;">package com.zyj.wifi;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.widget.Toast;  
  6.   
  7. import butterknife.ButterKnife;  
  8. import butterknife.OnClick;  
  9. import butterknife.OnLongClick;  
  10.   
  11. public class ButterknifeActivity extends AppCompatActivity {  
  12.   
  13.     @OnClick(R.id.button1 )   //给 button1 设置一个点击事件  
  14.     public void showToast(){  
  15.         Toast.makeText(this"is a click", Toast.LENGTH_SHORT).show();  
  16.     }  
  17.   
  18.     @OnLongClick( R.id.button1 )    //给 button1 设置一个长按事件  
  19.     public boolean showToast2(){  
  20.         Toast.makeText(this"is a long click", Toast.LENGTH_SHORT).show();  
  21.         return true  ;  
  22.     }  
  23.   
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_butterknife);  
  28.   
  29.         //绑定activity  
  30.         ButterKnife.bind( this ) ;  
  31.   
  32.     }  
  33. }</span>  

zelezny : Butterknife插件的使用

插件的安装



插件的使用

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



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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值