Butter Knife介绍

Butter Knife 是Android系统的View注入框架(依赖注入),通过注解(Annotation)绑定Android中View的属性和方法,减少findViewById(),setOnClickListener()的使用。

GitHub地址:https://github.com/JakeWharton/butterknife


Butter Knife优点

  • 简化代码,提升开发效率(强大的View绑定和Click事件处理功能)
  • 方便处理Adapter里的ViewHolder绑定问题
  • 代码清晰,可读性强,配置简单

Butter Knife的使用

安装Android ButterKnife Zelezny 插件

打开Android Studio—>Settings—>Plugins—>搜索Android ButterKnife Zelezny,点击安装,重启AS生效。

添加依赖

在Android Studio项目 build.gradle(Project:项目名称)文件中引入:

buildscript {    ...    mavenCentral()   }  dependencies {    classpath 'com.jakewharton:butterknife-gradle-plugin:8.7.0'  }}

在 build.gradle(Module.app)文件中引入:

dependencies {  ...  compile 'com.jakewharton:butterknife:8.7.0'  annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'}

代码示例

编写activity_main.xml中的代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <Button        android:id="@+id/btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Button"        android:textAllCaps="false" />    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:textSize="18sp" />LinearLayout>

生成注解:

使用快捷键生成注解,选中布局文件—>Alt+Insert,如图:

选中Generate Butterknife Injections,如图:

MainActivity.java中的代码如下:

public class MainActivity extends AppCompatActivity {    @BindView(R.id.btn)    Button btn;    @BindView(R.id.tv)    TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //绑定Activity        ButterKnife.bind(this);    }    // 绑定监听事件,比如点击事件    @OnClick(R.id.btn)    public void clickBtn() {        tv.setText("Hjw");    }}

非Activity中使用 Butter Knife

在Fragment中使用Butter Knife

public class MyFragment extends Fragment {    @BindView(R.id.btn)    Button btn;    @BindView(R.id.tv)    TextView tv;    Unbinder unbinder;    public MyFragment() {        // Required empty public constructor    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        View view = inflater.inflate(R.layout.fragment_my, container, false);        unbinder = ButterKnife.bind(this, view);        return view;    }    @Override    public void onDestroyView() {        super.onDestroyView();        unbinder.unbind();    }}

在Adapter中使用Butter Knife

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 = layoutInflater.inflate(R.layout.item_listview, parent, false);            holder = new ViewHolder(view);            view.setTag(holder);        }        holder.img.setImageResource(R.mipmap.ic_launcher);        return view;    }    static class ViewHolder {        @BindView(R.id.img)        ImageView img;        ViewHolder(View view) {            ButterKnife.bind(this, view);        }    }}

了解更多用法,请见官网:https://jakewharton.github.io/butterknife/

总结

本教程主要总结了Butter Knife的配置以及使用,欢迎同学们学习。

更多相关文章

  1. 安卓在代码中设置TextView的drawableLeft、drawableRight、drawa
  2. Android(安卓)帧布局(FrameLayout)的理解
  3. Mac Android(安卓)Studio快捷键
  4. PHP 和 Android(安卓)MD5 加密出来结果是一样的代码
  5. Android(安卓)顶部状态栏覆盖到应用之上?
  6. 开发安卓-android使用webview加载网页无法使用js的问题
  7. Android(安卓)提升开发效率工具(Template/Plugin)
  8. Android(安卓)3.0 访问WebService 出现 android.os.NetworkOnMai
  9. Android(安卓)Studio 3.1.1更新问题Could not get unknown prope

随机推荐

  1. JAVA学到什么程度才可以转战Android?【高
  2. Android亮屏速度分析总结
  3. Android(安卓)WiFi 调试之爬坑
  4. (Android) 如何使用HOOK实现动态注入以及
  5. 谷歌困境:缺乏整合型系统 Android一家独热
  6. android的编码习惯
  7. 在android中开发快速地搜索手机文件引擎
  8. Android(安卓)手把手进阶自定义View(十二)-
  9. Android(安卓)Handler Message总结
  10. android Q 深色主题