androidbutterknife
A. android 源碼可以使用butterknife嗎
使用方式: 導入Butterknife的jar包,不需要修改配置文件 添加AndroidStudio插件(可選,需要依賴ButterKnife的jar包) 下載一個插件Android ButterKnife Zelezny來配合Butterknife自動生成View。 注意,需要綁定的View或者資源的聲明必須是public,不能是private或者static AndroidAnnotation(AA)與ButterKnife的比較, AA的分析如果沒看的話建議先讀一下老衲的上一篇AA註解的介紹與流程分析 首先從功能上來說,AA提供的註解數量遠多於ButterKnife,功能也是無所不包(View的綁定,線程,監聽,動畫,balabala...)而ButterKnife僅僅提供針對View的註解。 其次從兩類框架的實現流程上來說,AA在一開始就已經生成了新的代碼XXXActivity_,後續的執行都是依賴於新的代碼。生成的方法和代碼量較多。ButterKnife在編譯時也是會生成新的中間工具類,代碼量相對於AA來說略少,但是新增了類文件。並且,在運行時,需要通過一點點反射的技術來實現整體的邏輯。 第三,從上手成都上來說,AA的前期工作略麻煩一些,並且後期需要手動修改類名(XXX的後面加上下劃線)ButterKnife則需要在類中添加ButterKnife.Bind方法來使用綁定功能。AA稍微麻煩一丟丟。
B. android library中怎樣使用butterknife
配置:
用gradle配置的時候加入:
compile 'com.jakewharton:butterknife:6.1.0'
注意是加在Mole: app的gradle文件中.
加上之後不用運行什麼命令,直接Sync一下就可以在External Libraries裡面看到butterknife.
功能1: 再也不用寫findViewById()啦.
以前的:
mTextView1 = (TextView) findViewById(R.id.butter_text_view_1);
現在可以這樣實現:
首先在變數聲明的時候加上註解:
@InjectView(R.id.butter_text_view_2)
TextView mTextView2;
如果id找不到,會在編譯的時候報錯.
之後在設置好布局之後調用ButterKnife.inject():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo_butter_knife);
//using butter knife
ButterKnife.inject(this);
}
之後View對象就可以直接使用了.
需要注意的是View變數聲明的時候不能為private或者static.
除了Activity之外,你可以提供其他的View Root,來獲取對象(執行注入).
還可以用來簡化Adapter裡面的ViewHolder:
ButterKnife in Fragment
在Fragment中也可以使用ButterKnife來獲取View:
public class SimpleFragment extends Fragment {
@InjectView(R.id.fragment_text_view)
TextView mTextView;
public SimpleFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_simple, container, false);
ButterKnife.inject(this, view);
mTextView.setText("TextView in Fragment are found!");
return view;
}
}
ButterKnife in Adapter ViewHolder
Adapter有一種常用的優化策略,就是使用ViewHolder來減少findViewById()的重復調用.
以前寫過相關的博文: http://www.cnblogs.com/mengdd/p/3254323.html
用了ButterKnife之後, ViewHolder的使用可以變成這樣:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.person_item_layout, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Person person = getItem(position);
if (null != person) {
holder.name.setText(person.getName());
holder.age.setText(String.valueOf(person.getAge()));
holder.location.setText(person.getLocation());
holder.work.setText(person.getWork());
}
return convertView;
}
static class ViewHolder {
@InjectView(R.id.person_name)
TextView name;
@InjectView(R.id.person_age)
TextView age;
@InjectView(R.id.person_location)
TextView location;
@InjectView(R.id.person_work)
TextView work;
public ViewHolder(View view) {
ButterKnife.inject(this, view);
}
}
可以看到ViewHolder類加了一個帶參數View的構造方法,用註解標記每個欄位,再也不需要在getView()方法里調用findViewById()方法了.
C. android butterknife 與 databinding 那個好 有什麼優點
Android 5.0 之前的版本,對 @ interface 註解操作處理的並不好,效率完全不能和 jvm 相比,所以注重運行流暢的框架基本都拋棄了 註解 的使用。而 ButterKnife 的注入依賴註解,其運行效率必然不高。另外,在一些場景下,比如視圖注入的過程中,你並不能優化 ButterKnife 的查找。比如一個我們需要找到一個父視圖中的數個子視圖,如果純手工寫,我們可以先找到父視圖,在從父視圖中查找子視圖。而 ButterKnife 卻要每次重新從根視圖去查找,效率也是有所下降的。想了解更多請關注扣丁學堂。
D. android butterknife zelezny怎麼使用
首先提下ButterKnifey已經更新到版本7.0.1了,現在註解已經不叫@InjectView了,而叫@Bind,感覺更貼合語義。同時注冊的方式也從
ButterKnife.inject(this);
變成了
ButterKnife.bind(this);
關於7.0.1的ButterKnife的各種用法和功能,可以參考ButterKnife的github上的主頁:
http://jakewharton.github.io/butterknife/
言歸正傳開始說說Android Butterknife Zelezny這個插件,事實上這是個Android Studio的plugin,他可以讓你在添加Butterkinfe註解時偷偷懶,直接點擊幾下滑鼠既可以完成註解的增加,同時還是圖形化的操作,可以說,大大的減輕了開發負擔。尤其是當你的layout中有很多很多的view需要通過findviewbyid來獲得引用時
E. Android開發ButterKnife的問題
click的方法並不是重載的,原名應該是onClick吧,你是在界面屬性定義的綁定點擊事件嗎?你可以讓activity繼承借口OnClickListen的從而實現方法的重載
F. android studio怎麼一鍵註解butterknifey
方法/步驟1:導入插件
1
點擊「File」文件,選擇「Project Structrue……」,如圖:
2
點擊左側欄的「app」,然後點擊頂部導航的「Dependencies」,最後點擊「加號」,如圖:
3
點擊「加號」後,會出現三個選項,選擇第一個(添加第三方庫),如圖:
4
輸入,「butterknife」,點擊搜索按鈕,如圖:
5
選擇「com.jakewharton:butterknife:8.1.0」,點擊「OK」,如圖:
6
這時我們可以看到「Dependencies」中增加了一個,「com.jakewharton:butterknife:8.1.0」,點擊「OK」按鈕,如圖:
7
這時看到,app文件夾下的「build.gradle」文件中,"dependencies"下增加了「compile 'com.jakewharton:butterknife:8.1.0'」,然後就是少許的等待,如圖:
8
此時打開project下的「build.gradle」,然後在"dependencies"下增加了「classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'」,如圖:
9
此
時在打開app文件夾下的「build.gradle」,添加「apply plugin: 'android-apt'」,「apt
'com.jakewharton:butterknife-compiler:8.1.0'」,然後點擊「Sync Now」,如圖:
10
此時引用成功,現在開始使用吧.
END
方法/步驟:使用方法
寫XML布局文件,把要想初始化的控制項,都加上ID
將滑鼠移到代碼中的布局的位置,摁快捷鍵「Alt+Insert」彈出對話框,點擊「Generate ButterKnife Injections」,如圖:
彈出對話框,看看是不是自己需要的控制項,點擊「Confirm」,如圖:
完成後看到代碼,如圖:
Fragment使用結果如圖: