接触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了!
每天进步一点点,时间会让你成为巨人!加油!