ButterKnife使用详解

本文介绍了ButterKnife的基本使用方法,包括简化findViewById方法、事件绑定等,通过实例展示了如何在Activity中注入视图和处理点击事件。

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

接触ButterKnife是去年的子类项目,感觉灰常灰常的好用!省去了所以的findViewById方法,连事件的点击事件,写出来的代码整齐简洁,阅读性强!所以,今天就趁着测试在测试的闲工夫,整理整理关于ButterKnife的相关知识点及一些基本的使用方法。

开发android的都知道,Activity是布局文件的载体,也就是页面的展示!但是Activity并不决定View的展示,也就是真正显示图形的实际上跟Activity没有关系,完全由WindowManager来决定。WindowManager是一个系统服务,因此可以直接调用这个服务来创建界面,并且更绝的是Dialog、Menu也是有WindowManager来管理的。必须要谨记这一点!

好,进入正题!这里以 引入compile ‘com.jakewharton:butterknife:7.0.1’为例。
在build.gradle中添加如下引入:

compile 'com.jakewharton:butterknife:7.0.1'

再在Build中reBuild一下,等待工程编译完成即可!

下图是butternife类的部分介绍:

这里写图片描述

大意是告诉我们使用Buffernife的基本使用,即先在onCreate()方法中进行绑定操作:

ButterKnife.bind(this);

接着就可以绑定view控件:

Bind(R.id.title) EditText titleView;
Bind(R.id.subtitle) EditText subtitleView;

接着往下看。
这里写图片描述

这段注释告诉我们,我们可以在除了Activity的绑定之外,可以绑定任何形式的View,Dialog。当然,在绑定的时候,需要告诉它们所需要依附的Activity(Dialog)或者需要的Context(View)。

可进行多view的同时绑定:
这里写图片描述

可对相同类型的绑定,生成List nameView集合;还可以个个个View申请Action ,setter值和为每个View申请添加属性值!

这里写图片描述

@Nullable的介绍如下:
这里写图片描述

即告诉我们可以在参数或者变量,再或者方法上进行注解,那么使用这个注解后,我的参数或者变量或者参数可以返回null;

接着看,我们也可以添加资源文件注解:颜色,String中的数组。

接下来我来用代码实战操作一遍。

这是我们的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.administrator.myapplication.MainActivity">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/ll_bottom_bar"
        >
    <TextView
        android:id="@+id/m_tv_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    </ScrollView>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:gravity="center_vertical"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal"
        android:id="@+id/ll_bottom_bar"
        >

        <Button
            android:id="@+id/btn_test1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="ACTION1" />
        <Button
            android:id="@+id/btn_test2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="ACTION1" />
        <Button
            android:id="@+id/btn_test3"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="ACTION1" />
        <Button
            android:id="@+id/btn_test4"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="ACTION1" />
    </LinearLayout>
</RelativeLayout>

测试Activity的代码如下:

package com.example.administrator.myapplication;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.List;

import butterknife.Bind;
import butterknife.BindBool;
import butterknife.BindColor;
import butterknife.BindString;
import butterknife.ButterKnife;
import butterknife.OnClick;


public class MainActivity extends AppCompatActivity {

    @Nullable
    @Bind(R.id.m_tv_text)
    TextView mTvText;


    @Bind(R.id.btn_test1)
    Button btnTest1;
    @Bind(R.id.btn_test2)
    Button btnTest2;
    @Bind(R.id.btn_test3)
    Button btnTest3;
    @Bind(R.id.btn_test4)
    Button btnTest4;

    //strings资源文件
    @BindString(R.string.app_content)
    String mContent;

    //color资源文件
    @BindColor(R.color.colorAccent)
    int textColor;

    //bool文件资源
    @BindBool(R.bool.isTablet)
    boolean isTablet;

    //多个注解集合
    @Bind({R.id.btn_test1,R.id.btn_test2})
    List<Button> buttons;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        buttons.get(0).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }
    @Override
    protected void onDestroy() {
        ButterKnife.unbind(this);
        super.onDestroy();
    }

    //点击View集合
    @OnClick({R.id.btn_test1, R.id.btn_test2, R.id.btn_test3, R.id.btn_test4})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_test1:
                break;
            case R.id.btn_test2:
                break;
            case R.id.btn_test3:
                break;
            case R.id.btn_test4:
                break;
        }
    }
}

OK,简单的使用就这了,由于水平和时间有限,暂不做源码的研究了!不过,大概看了看跟Retrafit有些相似,大量的使用接口和注解!他们脑袋是怎么长得啊!怎么那么强大!哈哈。。。

最后告诉大家快速生成ID绑定的方法:

第一步安装zelezny插件:

这里写图片描述

第二步将鼠标移动到引用的布局文件,右键点击:
这里写图片描述

注意的是必须将鼠标放在引用的布局文件上

第三步:

这里写图片描述

第四步:
这里写图片描述

到这就可以大批量的生成你需要绑定的ID了!

每天进步一点点,时间会让你成为巨人!加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值