ButterKnife使用详解

接触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了!

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用ButterKnife,需要进行以下步骤: 1. 在项目的build.gradle文件中添加ButterKnife的依赖: ```groovy dependencies { implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' } ``` 2. 在需要使用ButterKnife的Activity或Fragment中,使用`@BindView`注解来绑定视图元素。 ```java public class MainActivity extends AppCompatActivity { @BindView(R.id.textView) TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // 现在可以直接使用textView了 textView.setText("Hello ButterKnife!"); } } ``` 3. 调用`ButterKnife.bind(this)`方法来完成视图的绑定。这通常是在Activity的`onCreate()`方法中进行。 4. 在需要为视图设置点击事件、长按事件等的地方,使用`@OnClick`、`@OnLongClick`等注解来定义相应的事件处理方法。 ```java public class MainActivity extends AppCompatActivity { @BindView(R.id.button) Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // 设置点击事件处理方法 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理点击事件 } }); } @OnClick(R.id.button) void onButtonClick() { // 处理点击事件,使用注解方式 } @OnLongClick(R.id.button) boolean onButtonLongClick() { // 处理长按事件,使用注解方式 return true; } } ``` 这样,你就可以使用ButterKnife来简化视图绑定和事件处理的工作了。记得在合适的时机调用`ButterKnife.unbind(this)`方法来解绑视图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值