ButterKnife
1.1、ButterKnife简介

ButterKnifeAndroid之神JakeWharton主导的IOC框架。

ButterKnife官网:http://jakewharton.github.io/butterknife

ButterKnifeGitHub上的网址:https://github.com/JakeWharton/butterknife

1.2、ButterKnife的优势

先看看用传统的方法来写,声明控件:

package com.fpliu.newton;

public class XXActivity extends Activity {

    private ImageTextView mOrgDoc;
    private ImageTextView mVideo;
    private ImageTextView mShare;
    private ImageTextView mDiscuss;
    private TextView m_tv_inform;
    private TextView m_tv_news;
    private ImageView m_iv_line;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mOrgDoc = (ImageTextView) findViewById(R.id.orgdoc);
        mShare = (ImageTextView) findViewById(R.id.share);
        mDiscuss = (ImageTextView) findViewById(R.id.discuss);
        mVideo = (ImageTextView) findViewById(R.id.video_conference);
        m_tv_inform = (TextView) findViewById(R.id.inform);
        m_tv_news = (TextView) findViewById(R.id.news);
        mListView = (ListView) findViewById(R.id.home_lv);

        //TODO
    }
}

再看看用ButterKnife实现的同样的功能:

package com.fpliu.newton;

public class XXActivity extends Activity {

    @BindView(R.id.orgdoc)ImageTextView orgdoc;
    @BindView(R.id.share)ImageTextView share;
    @BindView(R.id.discuss)ImageTextView discuss;
    @BindView(R.id.video_conference)ImageTextView videoConference;
    @BindView(R.id.inform)TextView inform;
    @BindView(R.id.news)TextView news;
    @BindView(R.id.home_lv)ListView homeLv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        //TODO
    }
}

看起来,代码量减少了不少,最重要的,这段代码根本不用我们开发者手写,可以用AndroidStudio插件Zelezny自动生成。

总结起来,ButterKnife的优势有如下:

  • 强大的View绑定和Click事件处理功能,简化代码,提升开发效率
  • 方便的处理Adapter里的ViewHolder绑定问题
  • 运行时不会影响APP效率,使用配置方便
  • 代码清晰,可读性强
1.3、Zelezny

Zelezny是帮助开发者自动生成ButterKnife注解的Android Studio插件。

首先把光标放到R.layout.xxx上,然后右键选择Generate...,弹出如下选项:

选择Generate ButterKnife Injections,弹出如下界面:

勾选要生成绑定的控件,而且还能自定义各个控件的名字,勾选后面的对应的OnClick会生成OnClick事件处理的代码,最后点击“Confirm”,就生成了代码。

1.4、ButterCookie

在单独使用ButterKnife 8.2.0之前的版本的时候,有个限制,就是您的gradle工程必须单模块的, 因为只有app模块的R.id.xx才是常量, 而其他子模块里的R.id.xx并不是常量,导致在子模块中无法使用@InjectView等注解, 也就无法使用ButterKnife了。要解决这个问题,需要使用一个gradle插件ButterCookie

ButterCookieGitHub上的网址:https://github.com/JackCho/ButterCookie

1.5、在build.gradle里面添加依赖
compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
1.6、混淆