[轉]Android Libraries 介紹 - Butter knife
Butter Knife 簡介

Butter Knife - Field and method binding for Android views。助你簡化程式碼,方便閱讀。
使用方法
開發 andriod app 的時候,一定有寫過類似的 code:
class ExampleActivity extends Activity {
TextView title;
TextView subtitle;
TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
title = (TextView)findViewById(R.id.title);
subtitle = (TextView)findViewById(R.id.subtitle);
footer = (TextView)findViewById(R.id.footer);
//other codes
}}
當一個 activity 有很多個 view 的話,便會發覺這些 findViewById() 的 code 變得很長很煩很長很煩很長很煩。
用了 Butter Kinfe ,便可以簡化成
class ExampleActivity extends Activity {
@Bind(R.id.title) TextView title;
@Bind(R.id.subtitle) TextView subtitle;
@Bind(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// other codes
}}
用 @Bind 加上 ButterKnife.bind() 自動指定對應的 view。是不是簡潔了很多?
Fragment 也可使用:
public class FancyFragment extends Fragment {
@Bind(R.id.button1) Button button1;
@Bind(R.id.button2) Button button2;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
}
Adapter 中的 ViewHolder 也沒問題:
public class MyAdapter extends BaseAdapter {
@Override public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view != null) {
holder = (ViewHolder) view.getTag();
} else {
view = inflater.inflate(R.layout.whatever, parent, false);
holder = new ViewHolder(view);
view.setTag(holder);
}
holder.name.setText("John Doe");
// etc...
return view;
}
static class ViewHolder {
@Bind(R.id.title) TextView name;
@Bind(R.id.job_title) TextView jobTitle;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
另外可以將幾個 TextView 放在 List 中:
@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
也可以用來取代 OnClickListener:
@OnClick(R.id.submit)
public void submit(View view) {
// TODO submit data to server...
}
幾個 Button 當然可以用同一 method 啦
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void submit(View view) {
// TODO submit data to server...
}
安裝方法
到官網直接下載 jar 或者用 gradle
compile 'com.jakewharton:butterknife:7.0.1'
lintOptions {
disable 'InvalidPackage'
}
用 IntelliJ IDEA 的朋友可能要到 Setting > Annotation Processors 設定使用 Butter Knife。
如有使用 proguard,記得要加
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
好處
令 code 精簡,這一點已經足夠了。阿們。
總結
Butter Knife 看似作用不大,實際上不使用它也不會有大影響。但是一用上它便會愛上它的簡潔和方便,現在每個 project 也有使用。它是屬於那種「不用不會有問題,但一用便令人上癮」的類別的 libraries。
連結
[轉]Android Libraries 介紹 - Butter knife的更多相关文章
- Android:Butter Knife 8.0.1配置
github地址:https://github.com/GarsonZhang/butterknife Butter Knife Field and method binding for Androi ...
- android注解[Jake Wharton Butter Knife]
Introduction Annotate fields with @InjectView and a view ID for Butter Knife to find and automatical ...
- Android RoboGuice开源框架、Butter Knife开源框架浅析
Google Guice on Android(RoboGuice) 今天介绍一下Google的这个开源框架RoboGuice, 它的作用跟之前讲过的Dagger框架差点儿是一样的,仅仅是Dagger ...
- android Butter Knife 使用详解
Butter Knife github连接:https://github.com/JakeWharton/butterknife 本文使用的butterknife版本7.0.1 butterknife ...
- Visual Studio 跨平台開發實戰(4) - Xamarin Android 基本控制項介紹 (转帖)
前言 不同於iOS, Xamarin 在Visual Studio中針對Android, 可以直接設計使用者介面. 在本篇教學文章中, 筆者會針對Android的專案目錄結構以及基本控制項進行介紹, ...
- Android Studio & Butter Knife —— 快速开发
Butter Knife是一个Android的注解框架,可以帮助用户快速完成视图.资源与对象的绑定,完成事件的监听.(也就是少写findViewById()) 具体的介绍可以参考官方主页: http: ...
- Linux Kernel 排程機制介紹
http://loda.hala01.com/2011/12/linux-kernel-%E6%8E%92%E7%A8%8B%E6%A9%9F%E5%88%B6%E4%BB%8B%E7%B4%B9/ ...
- QR Code於台灣各行業的行銷應用案例介紹
當走在東京的大街小巷時,在五花八門的廣告看板.雜誌.護照簽證.海關.宣傳品.廣告.旅遊和導覽手冊.產品包裝.甚至在餐廳菜單上,皆可看到上面有一組黑色神秘二維條碼圖案:QR Code,當看到有興趣的商品 ...
- <Android开源库 ~ 1> GitHub Android Libraries Top 100 简介
转载自GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitH ...
随机推荐
- android应用锁之监听应用前后台切换方式
今天在做技术总结,顺便就把知识共享,个人崇尚分享. 通过以下方式来监听是不是发生了应用的前后台切换: 1. android api 10 – 15 通过ActivityManager register ...
- Java简介
命令行输入参数不是在代码中设置输入的,而是这样做:选中你java项目中的java---右击----Run As---Run Configurations---Arguments----填入参数(多个参 ...
- PHP自动发邮件
自动发邮件 使用了这个类http://bbs.php100.com/read-htm-tid-121431.html 因他用的php版本较老,用到了函数ereg_replace() 和 ereg() ...
- EverEdit安装
- [转]Jenkins Xcode打包ipa
本地打包. 如果Mac 上没有安装brew.先安装:ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/ins ...
- Linux (Ubuntu) 下配置VPN服务器
昨天网上找了下VPN的相关信息,居然各种撞墙,特别郁闷,自己不容易找到的东西,记录下VPN的配置信息 ubuntu 13.1下配置VPN ,采用PPTP实现, 第一步.安装pptpd,没有安装包记得 ...
- 反向Ajax,实现服务器向客户端推送消息之 Comet
基于 HTTP 长连接.无须在浏览器端安装插件的“服务器推”技术为“Comet”. 下面将介绍两种 Comet 应用的实现模型. 基于 AJAX 的长轮询(long-polling)方式 AJAX 的 ...
- AngularJs的UI组件ui-Bootstrap分享(五)——Pager和Pagination
ui-bootstrap中有两个分页控件,一个是轻量级的Pager,只有上一页和下一页的功能,另一个是功能完整的Pagination,除了上一页和下一页,还可以选择首页和最后页,并且支持多种页数的显示 ...
- Android--JUnit单元测试
Android--JUnit单元测试 前言 本篇博客说明一下在Android开发中,如何使用JUnit进行单元测试.首先来了解一下什么是JUnit,JUnit测试是白盒测试,即主要是程序员自己对开 ...
- git常用命令有用
http://www.cnblogs.com/cspku/articles/Git_cmds.html