浅谈Android ButterKnife框架的使用

本文介绍了Android ButterKnife框架,一个用于简化View注入和事件处理的开源库。文章详细阐述了ButterKnife的优点、使用步骤,包括环境配置、依赖添加、代码生成,并展示了效果演示和完整代码示例。除此之外,还列举了其他常用注解如@BindArray、@BindBitmap等,最后总结了ButterKnife在运行时对性能的影响和在不同场景的应用。
摘要由CSDN通过智能技术生成

浅谈Android ButterKnife框架的使用

一、简介

ButterKnife 是注解中相对简单易懂的很不错的开源框架,是一个 专注于Android系统的View注入框架, 以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在 编译的时候生成新的class

Butterknife优点如下:

  1. 强大的View绑定和Click事件处理功能,简化代码,提升开发效率

  2. 方便的处理Adapter里的ViewHolder绑定问题

  3. 运行时不会影响APP效率,使用配置方便

  4. 代码清晰,可读性强

    Butterknife的下载地址:https://github.com/JakeWharton/butterknife


二、使用步骤

​ 实验环境:Android Studio 3.3.2版本、SDK API 26、Butterknife 1.6.0

  1. 打开Android Studio 的settings,依此进行如下操作

    在这里插入图片描述

  1. 在build.gradle 中添加如下两行代码

        implementation 'com.jakewharton:butterknife:8.8.1'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    

    在这里插入图片描述

  2. 选中MainActivity中布局文件名称,右键点击生成按钮,如图所示

    在这里插入图片描述

    在这里插入图片描述

    点击生成,自动注入三个View,并生成CheckBox和Button的点击事件函数,省去了我们查找元素的麻烦。生成后代码如下:

    package com.example.butterknife;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.TextView;
    
    import butterknife.BindView;
    import butterknife.ButterKnife;
    import butterknife.OnClick;
    
    public class MainActivity extends AppCompatActivity {
    
        @BindView(R.id.tv_butterknife)
        TextView tvButterknife;
        @BindView(R.id.cb_butterknife)
        CheckBox cbButterknife;
        @BindView(R.id.bt_butterknife)
        Button btButterknife;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
        }
    
    
        @OnClick({R.id.cb_butterknife, R.id.bt_butterknife})
        public void onViewClicked(View view) {
            switch (view.getId()) {
                case R.id.cb_butterknife:
                    break;
                case R.id.bt_butterknife:
                    break;
            }
        }
    }
    
    
  3. 之后对代码进行进一步的完善,添加点击的实现以及更改TextView的文本显示。

        // 利用butterknife 生成点击事件
        @OnClick({R.id.cb_butterknife, R.id.bt_butterknife})
        public void onViewClicked(View view) {
            switch (view.getId()) {
                case R.id.cb_butterknife:
                    Toast.makeText(this, "点击了CheckBox", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.bt_butterknife:
                    Toast.makeText(this, "点击了Button", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
        // 添加初始化函数,处理TextView的显示文本
        void initFunction(){
            tvButterknife.setText("我爱学习!");
        }
    
    

三、效果演示

  1. TextView的文本更改为“我爱学习”。点击CheckBox,弹出Toast提示

    在这里插入图片描述

  2. 点击button按钮,弹出Toast提示。

在这里插入图片描述


四、完整代码

package com.example.butterknife;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {
    // 利用butterknife找到相应的View组件
    @BindView(R.id.tv_butterknife)
    TextView tvButterknife;
    @BindView(R.id.cb_butterknife)
    CheckBox cbButterknife;
    @BindView(R.id.bt_butterknife)
    Button btButterknife;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initFunction();
    }

    // 利用butterknife 生成点击事件
    @OnClick({R.id.cb_butterknife, R.id.bt_butterknife})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.cb_butterknife:
                Toast.makeText(this, "点击了CheckBox", Toast.LENGTH_SHORT).show();
                break;
            case R.id.bt_butterknife:
                Toast.makeText(this, "点击了Button", Toast.LENGTH_SHORT).show();
                break;
        }
    }
    // 添加初始化函数,处理TextView的显示文本
    void initFunction(){
        tvButterknife.setText("我爱学习!");
    }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >

    <TextView
        android:id="@+id/tv_butterknife"
        android:textSize="20sp"
        android:layout_margin="10dp"
        android:text="textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <CheckBox
        android:id="@+id/cb_butterknife"
        android:text="checkbox"
        android:textSize="20sp"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/bt_butterknife"
        android:textSize="20sp"
        android:text="button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

五、其他常用标签

@BindArray 绑定string里面array数组;@BindArray(R.array.city ) String[] citys ;

@BindBitmap 绑定图片资源为Bitmap;@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;

@BindString 绑定一个String id为一个String变量;@BindString( R.string.app_name ) String meg;

@BindColor 绑定color;@BindColor(R.color.colorAccent) int black;

@BindDimen 绑定Dimen;@BindDimen(R.dimen.borth_width) int mBorderWidth;

@BindDrawable 绑定Drawable;@BindDrawable(R.drawable.test_pic) Drawable mTestPic;

@BindFloat 绑定float

@BindInt 绑定int

@BindBool 绑定boolean值

五、小结

​ 通过实际操作可以发现,butterknife 对app的运行性能基本不会产生影响,但是在编译的时候可能会有编译速度变慢的情况。上面演示的是在activity中使用butterknife,更多的用法可参考官方文档,用法类似。

【参考链接】

[ButterKnife使用方法详解] : https://blog.csdn.net/zyw0101/article/details/80399225

[Android Butterknife(黄油刀) 使用方法总结] : https://blog.csdn.net/donkor_/article/details/77879630
[ButterKnife 的简单使用] : https://blog.csdn.net/zhu576558203/article/details/81411231

作者:曾艺祥 原文链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值