厌烦了写findViewById 试试ButterKnife吧

Posted lonkiss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了厌烦了写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吧的主要内容,如果未能解决你的问题,请参考以下文章

不需要ViewInject,简化你的findViewById

Android框架式编程之BufferKnife

Android ButterKnife注入框架

matlab中butter和buttap函数的区别

English - Green Peanut Butter

Butter Knife使用详解