第一步:添加依赖:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } apply plugin: 'com.neenbedankt.android-apt' dependencies { compile 'com.jakewharton:butterknife:8.0.1' apt 'com.jakewharton:butterknife-compiler:8.0.1' }
第二步:尝试
@BindView 替代findViewById
@OnClick 替代onClickListener
package com.xuan.butterknife; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { @BindView(R.id.tv_0) TextView tv_0; @BindView(R.id.bt_0) Button bt_0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); tv_0.setText("data:"); } @OnClick(R.id.bt_0) public void taost(View v) { Toast.makeText(this, "view:" + v, Toast.LENGTH_SHORT).show(); } }
</pre><pre code_snippet_id="1666789" snippet_file_name="blog_20160429_3_751271" name="code" class="java"><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" tools:showIn="@layout/activity_main"> <TextView android:id="@+id/tv_0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:id="@+id/bt_0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" /> </LinearLayout>
效果:
扩展:可以一次性获取多个view,
@BindViews({R.id.bt_1,R.id.bt_2,R.id.bt_3}) List<Button> buttons;
一次性设置多个view的点击事件:
@OnClick({R.id.bt_1, R.id.bt_2, R.id.bt_3}) public void buttonClick(View v) { Toast.makeText(this, "view:" + v, Toast.LENGTH_SHORT).show(); }
获取资源文件数据:
ButterKnife有很多注解:红色常用,这里不一一演示了@BindString(R.string.app_name) String appName;
butterKnife有一个比较有意思的功能action 可以批量操作view
@BindViews({R.id.bt_1, R.id.bt_2, R.id.bt_3}) List<Button> buttons; static final ButterKnife.Action<Button> disable=new ButterKnife.Action<Button>() { @Override public void apply(@NonNull Button view, int index) { view.setEnabled(false); } }; static final ButterKnife.Action<Button> enable=new ButterKnife.Action<Button>() { @Override public void apply(@NonNull Button view, int index) { view.setEnabled(true); } };
用法;
ButterKnife.apply(buttons,disable); // ButterKnife.apply(buttons,enable);
这样就可以批量使这些button 可以点击和不可点击
当然 ButterKnife的apply方法有大量重载形式:
如:
ButterKnife.apply(tv_0,View.ALPHA,0.0f);
改变某个view的透明度
ButterKnife 还有很多方法 欢迎尝试