您的位置:首页 > Web前端

笔记:ButterKnife使用(一)

2016-11-24 10:34 162 查看

一、 基本配置

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,就会看到如下菜单:



2、点击“Generage Butterknife Injections”则弹出如下窗口:



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

二、 基本使用

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.csdn.net/u014038534/article/details/52647703

(3) http://blog.csdn.net/itjianghuxiaoxiong/article/details/50177549
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android-框架