概念:
ButterKnife是一個專注于Android系統(tǒng)的View注入框架,以前總是要寫很多findViewById來找到View對象,有了ButterKnife可以很輕松的省去這些步驟蝗岖。是大神JakeWharton的力作,目前使用很廣秫筏。最重要的一點(diǎn),使用ButterKnife對性能基本沒有損失挎挖,因?yàn)锽utterKnife用到的注解并不是在運(yùn)行時反射的这敬,而是在編譯的時候生成新的class。項目集成起來也是特別方便蕉朵,使用起來也是特別簡單崔涂。
為什么要使用:
- 強(qiáng)大的View綁定和Click事件處理功能,簡化代碼始衅,提升開發(fā)效率
- 方便的處理Adapter里的ViewHolder綁定問題
- 運(yùn)行時不會影響APP效率冷蚂,使用配置方便
- 代碼清晰,可讀性強(qiáng)
配置ButterKnife:
- 在工程gradle下添加
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.jakewharton:butterknife-gradle-plugin:10.0.0' //添加這一行
}
- 在app的gradle下添加
apply plugin: 'com.jakewharton.butterknife'
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
(如果報錯就注釋掉這一行)
apply plugin: 'com.jakewharton.butterknife'
出現(xiàn)錯誤
The given artifact contains a string literal with a package reference 'android.support.v4.content' t
因?yàn)榘姹緵_突的原因
使用:綁定了一個點(diǎn)擊事件和長按事件
public class MainActivity extends AppCompatActivity {
@OnClick(R.id.button1 ) //給 button1 設(shè)置一個點(diǎn)擊事件
public void showToast(){
Toast.makeText(this, "is a click", Toast.LENGTH_SHORT).show();
}
@OnLongClick( R.id.button2 ) //給 button2 設(shè)置一個長按事件
public boolean showToast2(){
Toast.makeText(this, "is a long click", Toast.LENGTH_SHORT).show();
return true ;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//未參與綁定
Button button3=findViewById(R.id.button3);
//綁定activity
ButterKnife.bind( this ) ;
//未參與綁定時代碼量大
button3.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Toast.makeText(MainActivity.this, "is a long click", Toast.LENGTH_SHORT).show();
return true;
}
});
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="1"
android:id="@+id/button1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="2"
android:id="@+id/button2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="3"
android:id="@+id/button3"/>
</LinearLayout>