ButterKnife

配置

app的build.gradle中添加依赖

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

初始化

在Activity的OnCreate()里面的setContentView(@LayoutRes int layoutResID)之后

ButterKnife.bind(this);

13个绑定资源

@BindView

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

java代码:

@BindView(R.id.tv)
TextView textView;
textView.setText("测试@BindView");

测试截图:

@BindViews

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
<TextViewandroid:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
<TextViewandroid:id="@+id/tv3"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

java代码:

@BindViews({R.id.tv1,R.id.tv2,R.id.tv3})
List<TextView> textViews;
for(TextView textView:textViews){textView.setText("测试@BindViews:"+textView.getId());
}

测试截图:

@BindString

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

资源文件的 xml代码:

<string name="app_name">ButterKnife</string>

java代码:

@BindView(R.id.tv)
TextView textView;@BindString(R.string.app_name)
String string;
textView.setText(string);

测试截图:

@BindArray

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
<TextViewandroid:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
<TextViewandroid:id="@+id/tv3"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

资源文件的 xml代码:

<array name="tv_array"><item>TextView1</item><item>TextView2</item><item>TextView3</item>
</array>

java代码:

@BindViews({R.id.tv1,R.id.tv2,R.id.tv3})
List<TextView> textViews;@BindArray(R.array.tv_array)
String [] strings;
for(int i=0;i<strings.length;i++){textViews.get(i).setText(strings[i]);
}

测试截图:

@BindInt

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

资源文件的 xml代码:

<integer name="num">666</integer>

java代码:

@BindView(R.id.tv)
TextView textView;@BindInt(R.integer.num)
int intNum;
textView.setText(""+intNum);

测试截图:

@BindFloat

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

资源文件的 xml代码:

<item name="float_num" type="dimen" format="float">5.5</item>

java代码:

@BindView(R.id.tv)
TextView textView;@BindFloat(R.dimen.float_num)
float aFloat;
textView.setText(""+aFloat);

测试截图:

@BindBool

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

资源文件的 xml代码:

<bool name="tv_bool">true</bool>

java代码:

@BindView(R.id.tv)
TextView textView;@BindBool(R.bool.tv_bool)
boolean aBoolean;
if (aBoolean){textView.setText("测试@BindBool");
}

测试截图:

@BindColor

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="测试@BindColor"/>

资源文件的 xml代码:

<color name="purple_200">#FFBB86FC</color>

java代码:

@BindView(R.id.tv)
TextView textView;@BindColor(R.color.purple_200)
int color;
textView.setTextColor(color);

测试截图:

@BindDimen

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="测试@BindDimen"/>

资源文件的 xml代码:

<dimen name="text_size">30px</dimen>

java代码:

@BindView(R.id.tv)
TextView textView;@BindDimen(R.dimen.text_size)
int anInt;
textView.setTextSize(anInt);

测试截图:

@BindFont

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="测试@BindFont"/>

java代码:

@BindView(R.id.tv)
TextView textView;@BindFont(R.font.text_fond)
Typeface typeface;
textView.setTypeface(typeface);

字体资源文件(ttf文件):

测试截图:

@BindDrawable

UI页面的 xml代码:

<ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

java代码:

@BindView(R.id.image)
ImageView imageView;@BindDrawable(R.drawable.ic_launcher_background)
Drawable drawable;
imageView.setImageDrawable(drawable);

Drawable资源文件:

测试截图:

@BindBitmap

UI页面的 xml代码:

<ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

java代码:

@BindView(R.id.image)
ImageView imageView;@BindBitmap(R.drawable.logo)
Bitmap loge;
imageView.setImageBitmap(loge);

Drawable资源文件:

测试截图:

@BindAnim

UI页面的 xml代码:

<ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

anim资源文件(anim_gif.xml)的 xml代码:

<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromXDelta="0"android:toXDelta="320"android:fromYDelta="0"android:toYDelta="0"android:duration="2000"/>
</set>

java代码:

@BindView(R.id.image)
ImageView imageView;@BindBitmap(R.drawable.logo)
Bitmap loge;@BindAnim(R.anim.anim_gif)
Animation fadeIn;
imageView.setImageBitmap(loge);
imageView.setAnimation(fadeIn);

测试截图:

12个监听事件

@OnClick

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试@OnClick"/><Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击"/>

java代码:

@BindView(R.id.tv)
TextView textView;
@OnClick(R.id.btn)
void OnClick(){textView.setText("点击成功!");
}

测试截图:

@OnLongClick

上面代码加上如下java代码:

@OnLongClick(R.id.btn)
void OnLongClick(){textView.setText("长按成功!");
}

测试截图:

@OnTouch

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试@OnTouch"/>
<Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击"/>

java代码:

@BindView(R.id.tv)
TextView textView;
@OnTouch(R.id.btn)
boolean onTouch(MotionEvent motionEvent) {if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {textView.setText("按下");} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {textView.setText("松开");}return false;
}

测试截图:

@OnCheckedChanged

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试@OnCheckedChanged"/>
<RadioGroupandroid:layout_width="wrap_content"android:layout_height="wrap_content"><RadioButtonandroid:id="@+id/rd1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="单选A"/><RadioButtonandroid:id="@+id/rd2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="单选B"/>
</RadioGroup>

java代码:

@BindView(R.id.tv)
TextView textView;
@OnCheckedChanged({R.id.rd1, R.id.rd2})
void onChecked(RadioButton radioButton, boolean checked) {if (checked) {switch (radioButton.getId()) {case R.id.rd1:textView.setText("选中A");break;case R.id.rd2:textView.setText("选中B");}}
}

测试截图:

@OnEditorAction

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试@OnEditorAction"/>
<EditTextandroid:id="@+id/ed"android:layout_width="match_parent"android:layout_height="wrap_content"/>

java代码:

@BindView(R.id.tv)
TextView textView;@BindView(R.id.ed)
EditText editText;
@OnEditorAction(R.id.ed)
boolean onEditorAction(KeyEvent key){textView.setText(editText.getText().toString());return true;
}

测试截图:

@OnTextChanged

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试@OnTextChanged"/>
<EditTextandroid:id="@+id/ed"android:layout_width="match_parent"android:layout_height="wrap_content"/>

java代码:

@BindView(R.id.tv)
TextView textView;@BindView(R.id.ed)
EditText editText;
@OnTextChanged(R.id.ed)
void onTextChanged(CharSequence text) {textView.setText(text.toString());
}

测试截图:

@OnFocusChange

UI页面的 xml代码:

<TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试@OnFocusChange"/>
<EditTextandroid:id="@+id/ed"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="编辑框A"/>
<EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:hint="编辑框B"/>

java代码:

@BindView(R.id.tv)
TextView textView;@BindView(R.id.ed)
EditText editText;
@OnFocusChange(R.id.ed)
void onFocusChanged(boolean focused) {if (focused)textView.setText("编辑框A获取焦点");elsetextView.setText("编辑框A失去焦点");
}

测试截图:

@OnItemClick

UI页面的 xml代码:

<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnItemClick"/><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="wrap_content">
</ListView>

Item的 xml代码:

<TextViewandroid:id="@+id/item_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

java代码:

@BindView(R.id.tv)
TextView textView;private ListView listView;
private List<User> users;
private Context mContext;
private UserAdapter userAdapter=null;
private int sum=1;
void initData(){users=new ArrayList<>();users.add(new User("张三"));users.add(new User("李四"));
}
@OnItemClick(R.id.lv)
void onItemClick(int position) {textView.setText(sum+users.get(position).getName());sum++;
}
ButterKnife.bind(this);
mContext=MainActivity.this;
initData();
listView=findViewById(R.id.lv);
userAdapter=new UserAdapter(users,mContext);
listView.setAdapter(userAdapter);
package com.example.butterknife;public class User {private String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
package com.example.butterknife;public class UserAdapter extends BaseAdapter {private List<User> users;private Context mContext;public UserAdapter(List<User> users, Context mContext) {this.users = users;this.mContext = mContext;}@Overridepublic int getCount() {return users.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView= LayoutInflater.from(mContext).inflate(R.layout.lv_item,parent,false);TextView textView = convertView.findViewById(R.id.item_tv);textView.setText(users.get(position).getName());return convertView;}
}

测试截图:

@OnItemLongClick

在上面代码中加入以下代码:

@OnItemLongClick(R.id.lv)
boolean onItemLongClick(int position) {textView.setText(users.get(position).getName());return true;
}

测试截图:

@OnItemSelected

@OnPageChange

@Optional

ButterKnife相关推荐

  1. ButterKnife源码解析

    ButterKnife(https://github.com/JakeWharton/butterknife)是一款android平台的依赖注入框架,通过该工具可以实现View.OnClickList ...

  2. ButterKnife基本使用

    ButterKnife基本使用 Butter Knife处理字段和方法绑定. 重要更新: 目前(2016.4.29), ButterKnife的最新版本是8.0.1. Demo项目已更新: https ...

  3. Android studio ButterKnife插件

    1.功能:给所有的有id的控件添加注解 2.github地址 https://github.com/avast/android-butterknife-zelezny 3.插件下载地址 http:// ...

  4. android studio butterknife自动生成,Android Studio使用ButterKnife和Zelezny的方法

    Android Studio使用ButterKnife和Zelezny的方法 发布时间:2020-08-22 00:29:27 来源:脚本之家 阅读:182 作者:CSDN_陈诚 前言 ButterK ...

  5. 选择ButterKnife,告别findViewById

    安卓基础开发库,让开发简单点. DevRing & Demo地址:github.com/LJYcoder/De- 学习/参考地址: http://www.jianshu.com/p/9ad21 ...

  6. Java、Android注解代码生成(ButterKnife原理、ViewBinding)

    前言 首先需要一些先验知识: 浅谈Java/Android下的注解 Java.Android基础之-反射 Java.Android静态代理与动态代理 简介 在我们常用的框架中注解和自动生成代码的身影很 ...

  7. Android开发 Butterknife使用方法总结

    前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤.是大神J ...

  8. Android之Butterknife原理解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 Butterknife是一个专注于Android系统的View注入框架, ...

  9. java bindview_手写 ButterKnife BindView

    先建三个module,分别为Butterknife ButterKnife-Annotions ButterKnife-compiler,其中butterknife为Android Module其余的 ...

  10. android studio 插件开发 FindByTag插件 局部情况下取代ButterKnife插件

    貌似ButterKnife在多模块使用的时候不是很友好,并且并没有现成的插件可以使用,所以就适当看了看怎么使用插件动态生成FindByTag,我当前使用的框架(当然不是我开发的,在感谢表中会列出框架地 ...

最新文章

  1. The Six Best Practices(1~3)
  2. pandas读取字典(dict)数据
  3. 两年的等待,近700页干货,同系列累计销量25万+,第三版内容更扎实
  4. 【Android 启动过程】Android 应用启动流程 | Activity 启动流程
  5. [css] 如何将元素的所有css属性恢复为初始化状态?
  6. 数学也浪漫 数学的几句贴心话
  7. 模板应用到多个主机 zabbix_Zabbix监控TCP连接数
  8. ipython vim_python 之ubuntu开发环境vim 和 ipython
  9. 解决centos sudo执行仍旧显示Permission denied
  10. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
  11. Android现学现用第十二天
  12. LeetCode447. Number of Boomerangs
  13. ansible基本模块-server
  14. 【日常】ICS的lab7攻略和最近生活的吐槽
  15. Javaweb常见面试题
  16. 各种排序是否稳定,不稳定是为什么
  17. elementui二维表动态渲染
  18. 计算机专业综合理论模拟测试卷五,2020银保监会考试题库:计算机类模拟试题练习(五)...
  19. 嵌入式入门学习笔记1
  20. ObjectArx开发笔记(二)---命令注册、表结构

热门文章

  1. VS2019 MFC DLL共享动态链接库(MFC 常规库)封装例程非模态调用 MFC 常规库[二]
  2. 通过简书网学习 ActionChains,selenium webdriver 学习第3篇
  3. MySQL索引的创建与使用
  4. 我的世界网易手服务器文件夹,Minecraft服务端新手搭建指南(Linux篇)
  5. 物联网、智慧城市、增强现实(AR)与虚拟现实(VR)、区块链技术、语音识别、人工智能、数字汇流是大数据未来应用的七大发展方向
  6. 人体检测报警装置c语言,一种人体感应报警器的制作方法
  7. Failed at the chromedriver@2.46.0 install script
  8. 显示画面 大华摄像头_大华乐橙新品发布会:首发3D结构光AI人脸识别视频锁
  9. 派查查 :一个WearOS智能手表系统上的快递查询应用
  10. SVG互动排版公众号图文『点击播放GIF展开长图』模板代码