ButterKnife使用
【参考链接】
AndroidButterknife 8.4.0 使用方法总结
http://www.cnblogs.com/zhaoyanjun/p/6016341.html
AndroidStudio上方便使用butterknife注解框架的偷懒插件Android ButterknifeZelezny
http://www.cnblogs.com/soaringEveryday/p/4607438.html?utm_source=tuicool&utm_medium=referral
ButterKnife出自大神JakeWharton之手,项目地址在
https://github.com/JakeWharton/butterknife http://jakewharton.github.io/butterknife/
是一个依赖注入框架,用于简化android中findViewById、setOnclickListener等的模板代码。
如何使用呢?新建一个工程,先来集成ButterKnife
在module app的build.gradle中添加依赖
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
ButterKnife借助于APT,所以我们还需要添加APT
在工程根目录的build.gradle中添加android-apt的classpath
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath
'com.neenbedankt.gradle.plugins:android-apt:1.8'
在app module的build.gradle中
apply plugin: 'android-apt'
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
apt
'com.jakewharton:butterknife-compiler:8.4.0'
然后就可以在代码中使用ButterKnife了,
需要先给元素添加注解,然后在Activity的onCreate()中在setContentView()之后使用ButterKnife.bind()进行绑定,如下所示
@Override
protected void
onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
ButterKnife支持绑定的元素主要分为3类:
1、 绑定View
比如说在布局中定义的一个TextView,其id为R.id.tv
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
/>
在.java中可以通过@BindView注解进行绑定和使用(此时TextView的修饰符不能为private)
@BindView(R.id.tv)
public
TextView
tv;
@Override
protected void
onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
tv.setText("World");
相当于省略了()findViewById()。
2、 绑定Event
比如说在布局文件中定义了一个Button,其id为R.id.btn
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"/>
在.java中可以使用@OnClick注解为该Button的onClick事件绑定方法
@OnClick(R.id.btn)
public void
onClick(View view){
Toast.makeText(this,
"toast frombind",
Toast.LENGTH_LONG).show();
}
并且还可以同时为多个View的onClick事件绑定到同一个方法
@OnClick({R.id.btn, R.id.tv})
相当于省略了()findViewById()和setOnClickListener()。
支持的事件包括
@OnClickView
@OnLongClickView
@OnTouchView
@OnFocusChangeView
@OnTextChangedEditText
@OnItemSelectedListView
@OnPageChangeViewPager
3、 绑定Resource
比如说在资源文件中定义了如下String,其id为app_name
<resources>
<string name="app_name">ButterKnifeDemo</string>
</resources>
在.java中可以使用@BindString注解进行绑定
@BindString(R.string.app_name)
public
String
strAppName;
@Override
protected void
onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
Toast.makeText(this,
strAppName,
Toast.LENGTH_LONG).show();
}
相当于省略了getResource().getString()方法。
支持的资源类型包括
@BindString(R.string.title)String title;
@BindBool(R.bool.is_tablet)boolean isTablet;
@BindDrawable(R.drawable.graphic)Drawable graphic;
@BindColor(R.color.red)int red; // int or ColorStateList field
@BindDimen(R.dimen.spacer)Float spacer; // int (for pixel size) or float (for exact value) field
@BindArray(R.array.countries)
除了可以在Activity中使用,还可以在Fragment和ViewHolder中使用,如下所示
public class FancyFragment extends Fragment { @BindView(R.id.button1) Button button1; @BindView(R.id.button2) Button button2;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.bind(this, view); // TODO Use fields... return view; } } |
public class MyAdapter extends BaseAdapter { @Override public View getView(int position, View view, ViewGroup parent) { ViewHolder holder; if (view != null) { holder = (ViewHolder) view.getTag(); } else { view = inflater.inflate(R.layout.whatever, parent, false); holder = new ViewHolder(view); view.setTag(holder); }
holder.name.setText("John Doe"); // etc...
return view; }
static class ViewHolder { @BindView(R.id.title) TextView name; @BindView(R.id.job_title) TextView jobTitle;
public ViewHolder(View view) { ButterKnife.bind(this, view); } } } |
等等,觉得写太多@很麻烦?在Android Studio中可以借助zelezny插件自动生成注解和变量声明
按照如下步骤来安装插件,完成以后重启Android Studio
新建一个Activity类,重写其onCreate()方法并调用setContentView(R.layout.activity_main),然后将光标放置到R.layout.activity_main处右键,选择Generate依次如下点击,即可自动生成