首页 > 代码库 > 厌烦了写findViewById 试试ButterKnife吧

厌烦了写findViewById 试试ButterKnife吧

先上官网

http://jakewharton.github.io/butterknife/  和 https://github.com/JakeWharton/butterknife

配置开发环境

在代码开始之前 先要将库加入依赖

Eclipse 

去官网手工下载 jar 包, 放到 libs目录 或者其他方式加入到 Build Path当中

Android Studio

GUI 操作的方式 

菜单上 File -> Project Structure (或者直接点工具栏上的Project Structure) -> 左侧 Modules下的 app  -> 右侧  Dependencies 标签页 -> +号 -> Library dependency  搜索 butterknife  选择 com.jakewharton:butterknife:8.4.0 然后 OK, 版本号会变 , 反正选择没有 -compiler 这种带尾巴的。

新的butterknife 增加了 annotationProcessor 这种方式无法添加, 所以最终还是要编辑 Gradle Script

 

编辑 Gradle Script的方式 

打开 Module app的 build.gradle , 在dependencies 添加两行

dependencies {    ...    compile ‘com.jakewharton:butterknife:8.4.0‘    annotationProcessor ‘com.jakewharton:butterknife-compiler:8.4.0‘   ...}

省略号代表其他已有的 dependencies 。 添加之后 sync 

启动ButterKnife

开发环境配好后, 编码开始

在 Activity中使用, 首先要启动butterknife , 在 onCreate里 setContentView 之后立即 ButterKnife.bind(this);

   protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);    }

 

绑定View

是用@BindView 替代findViewById

public class MainActivity extends AppCompatActivity {    @BindView(R.id.btnGet)    Button mBtnGet;    @BindView(R.id.tvResult)    TextView mTvResult;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        mBtnGet.setText("do get");    }}

注意: 注解只能用在类成员上, 成员不能用 private 或 static 修饰, 不能用在方法中的局部变量上

绑定 资源

    @BindString(R.string.app_name)    String appName;    @BindColor(R.color.colorPrimary)    int colorPrimary;    @BindBool(R.bool.bool_name)    boolean boolName;

还支持更多类型,就不一一列举类

 

绑定 click 事件

不用声明 view 也不用setOnClickListener   , 参数是可有可无的, 如果不使用,不写省事

    @OnClick(R.id.btnPost) void doPost() {        mTvResult.setText("do post done");    }

 当然也可以像 onClickListener 一样带上参数

    @OnClick(R.id.btnPost) void doPost(View view) {        Button btnPost = (Button)view;        mTvResult.setText("do post done " + btnPost.getText().toString());    }

还可以把强转都省了,直接在参数上使用要转的确切类型butterknife能帮你自动转型

    @OnClick(R.id.btnPost) void doPost(Button btnPost) {        mTvResult.setText("do post done " + btnPost.getText().toString());    }

 

 

 

厌烦了写findViewById 试试ButterKnife吧