笔记:ButterKnife使用(一)

本文详细介绍了Android注解库ButterKnife的配置和基本使用,包括 Annotation Processing Tool 的配置,依赖添加,以及Android ButterKnife Zelezny插件的安装。在基本使用部分,讲解了如何绑定控件、资源和事件,包括在Fragment和Adapter中的应用,让Android开发更加便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 基本配置

Butterknife的github开源地址:https://github.com/JakeWharton/butterknife
Butterknife官网地址:http://jakewharton.github.io/butterknife/

1、配置Annotation Processing Tool(android-apt):

在build.gradle(project)中添加如下配置:

buildscript{
    repositories{
         jcenter()
    }

    dependencies{
         classpath ‘com.android.tools.build:gradle:2.1.0’
         classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }

}

注意:首先要配置Project查看模式下:gradle->build.gradle文件,Annotation Processing Tool版本最少也要1.0以上,因为Butterknife框架是使用apt技术,所以没配置该文件会直接导致编译不通过

2、添加依赖关系

Build.gradle(app)中添加如下依赖:

Dependencies{
    Compile fileTree(dir:’lib’,include:[‘*.jar’])
    testCompile ‘junit:junit:4.12’
    compile ‘com.android.support:appcompat-v7:23:3.0/*butterknife—依赖*/
    compile ‘com.jakewharton:buttonknife:8.2.1’
    apt ‘com.jakewharton:butterknife-compiler:8.2.1’
}

最后在build.gradle(app)顶部添加如下依赖(必须添加,否则编译通不过):

apply plugin: 'android-apt'

3、Android ButterKnife Zelezny插件的使用

在android-studio中点“File”–>“Settings”–>“Plugins” –>“在搜索框中输入ButterKnife”就会显示Android ButterKnife Zelezny插件的信息,根据提示,点击进行安装。

安装好该插件并配置好如上环境之后,就可以在Android Studio中很方便的使用ButterKnife了。

1、 先在Activity对应的布局文件中,定义好控件,并设置对应的ID,然后回到Activity,将光标移动到setContentView(R.layout.xxx)方法中的布局文件(xxx)上,按快捷键Alt+insert,就会看到如下菜单:
Butterknife
2、点击“Generage Butterknife Injections”则弹出如下窗口:
Butterknife

可以选择添加控件和绑定点击事件,选好要绑定的控件和事件之后点击确定即可。

二、 基本使用

1、简单使用:

@BindView的基本使用,
绑定(BindView)单个基本控件,

@BindView(R.id.tv_test1)
TextView mTextView;

@Override
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);//绑定
    mTextView.setText("test");//这样就可以直接使用该TextView 
}

以上是绑定单个控件的,下面为绑定多个控件的情况
绑定多个基本控件到List中:

@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })  
List<EditText> nameViews;
(通过List绑定多个控件)

2、绑定资源

@BindString(R.string.app_name)  
String appName;//sting  
@BindColor(R.color.red)  
int textColor;//颜色  
@BindDrawable(R.mipmap.ic_launcher)  
Drawable drawable;//drawble  
@Bind(R.id.imageview)  
ImageView mImageView;  
@Bind(R.id.checkbox)  
CheckBox mCheckBox;  
@BindDrawable(R.drawable.selector_image)  
Drawable selector;  

3、绑定事件

绑定单个控件

@OnClick(R.id.title)
public void onClick() {
    title.setText("这个是标题");
    //……
}

绑定多个控件

@OnClick({R.id.title, R.id.activity_main})
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.title:
            break;
        case R.id.activity_main:
            break;
    }
}

绑定选项点击事件

@OnItemClick(R.id.list)
void onItemClick(int position) {
    Log.e("hm", "点击了" + position);
}

4、include layout可通过View找到里面的子View

@BindView(R.id.in_includeView)
View mView;

@Override
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.activity_main); 
    ButterKnife.bind(this); 
    TextView textView = ButterKnife.findById(mView, R.id.tv_data);    
    textView.setText("这是从引入的View里面的找到的TextView ");    
}

5、在fragment上的使用

@BindView(R.id.lv_data)ListView mListView;

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup
                container, Bundle savedInstanceState) { 
        ButterKnife.bind(getActivity());
        return inflater.inflate(R.layout.fragment_layout, container, false);
}

可以看出,在Fragment中的使用和在Activity中的使用基本相似,但是在Fragment中需要在onDestoryView()方法中解绑,如下:

    public void onDestroyView() {  
        super.onDestroyView();  
        ButterKnife.unbind(this);//解绑  
    }  

6、Adapter可以简化传统的getview方法,使其简洁化

在adapter中的使用方法有两种,分别如下:

1、通过ButterView.findById(R.id.xxx)方法
@Override
public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder viewHolder;
      if (convertView == null) {
            viewHolder = new ViewHolder(); 
            convertView=LayoutInflater.from(activity).inflate(R.layout.item_layout, null);
            //通过ButterKnife找到该view
            viewHolder.textView = ButterKnife.findById(convertView, R.id.lv_data); 
            convertView.setTag(viewHolder); 
      } else { 
            viewHolder = (ViewHolder) convertView.getTag(); 
      } 
      viewHolder.textView.setText(data.get(position).toString()); 
      return convertView;
}
static class ViewHolder {
      TextView textView;
}
2、通过ButterKnife.bind(this, view)方法
 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = getLayoutInflater().inflate(R.layout.edu_theme_item, null);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.themeContent.setText(list.get(position).getContent());
        return convertView;
    }

    class ViewHolder {
        @Bind(R.id.theme_content)
        TextView themeContent;

        ViewHolder(View view){
            ButterKnife.bind(this, view);
        }
    }

由于ButterKnife是一个非常优秀的框架,所以在此做一个笔记以方便使用,下面是本人在学习的时候看过的几篇比较可以的博客,也记录下来方便反复查看学习。ButterKnife还有一些比较好用的功能,如apply,action、setter等,这些也正在研究中,等学好了,会用了再来总结一次,butterknife的功能也就差不多了。

参考博客:
(1) http://www.jianshu.com/p/fa0a03bfbf6e
(2) http://blog.youkuaiyun.com/u014038534/article/details/52647703
(3) http://blog.youkuaiyun.com/itjianghuxiaoxiong/article/details/50177549

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值