Android框架之ButterKnife(黄油刀)

ButterKnife是一个Android视图注入框架,简化了findViewById和事件处理代码,提高开发效率。它支持Activity、Fragment及Adapter的 ViewHolder 绑定,并提供控件ID注解、多个ID注解、绑定字符串、数组、颜色、位图等资源的功能。使用时需添加依赖,然后通过注解进行视图绑定,避免使用private或static修饰属性。在Android Studio中,还可以安装ButterKnife Zelezny插件辅助生成代码。
Android框架之ButterKnife(黄油刀)
Butterknife简介
ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。
ButtonKnife优点
1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2.方便的处理Adapter里的ViewHolder绑定问题
3.运行时不会影响APP效率,使用配置方便
4.代码清晰,可读性强
使用心得:
1.Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定
后,子类不需要再bind
2.Fragment ButterKnife.bind(this, mRootView);
3.属性布局不能用private or static 修饰,否则会报错
4.setContentView()不能通过注解实现。
使用步骤
首先需要添加依赖
1.在项目Project的build.gredle文件中的dependencies标签下添加以下代码
	classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

2.在module的build.gredle文件顶部和dependencies标签中添加以下代码
	apply plugin: 'android-apt'
	compile 'com.jakewharton:butterknife:8.4.0'
	apt 'com.jakewharton:butterknife-compiler:8.4.0'

最后点击右上角的Sync Now同步构建依赖
如何使用ButterKnife
1.控件ID注解:@DindView()
public class MainActivity extends AppCompatActivity {
    @BindView( R.id.button )
    public Button button ;
    // 注意:button 的修饰类型不能是:private 或者 static 。
    // 否则会报错:错误: @BindView fields must not be private or static.
    // (com.example.chenxiaoyang.butterknife.button)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定activity 
        ButterKnife.bind( this ) ; 
        button.setText( "ButterKnife");
    }
}
2.多个ID注解:@BindViews()
public class MainActivity extends AppCompatActivity {
    @BindViews({R.id.button, R.id.button2, R.id.button3, R.id.button3})
    public List<Button> btn_List;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this); 
        btn_List.get( 0 ).setText( "ButterKnifeOne"); 
        btn_List.get( 1 ).setText( "ButterKnifeTwo"); 
        btn_List.get( 2 ).setText( "ButterKnifeThree");
        btn_List.get( 2 ).setText( "ButterKnifeFore");
    }
}
3.在碎片Fragment中使用
public class ButterknifeFragment extends Fragment {
    @BindView(R.id.button)
    public Button button;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_butterknife, container, false);
        //绑定fragment 
        ButterKnife.bind(this, view);
        button.setText("ButterKnife");
        return view;
    }
}
4.绑定String字符串:@BindString()
public class MainActivity extends AppCompatActivity {
    @BindView(R.id.button)
    //绑定button 控件 
    public Button button;
    @BindString(R.string.app_name)
    //绑定string 字符串 
            String messge;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定activity 
        ButterKnife.bind(this);
        button.setText(messge);
    }
}
5.绑定String里的Array数组:@BindArray()
<resources>
    <string name="app_name">城市</string>
    <string-array name="city">
        <item>新疆</item>
        <item>北京</item>
        <item>上海</item>
        <item>广州</item>
        <item>成都</item>
    </string-array>
</resources>
public class MainActivity extends AppCompatActivity {
    @BindView(R.id.button)
    //绑定button 控件
    public Button button;
    @BindArray(R.array.city)
    //绑定string里面array数组
            String[] citys;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定activity
        ButterKnife.bind(this);
        button.setText(citys[0]);
    }
}
6.绑定Bitmap资源:@BindBitmap()
public class MainActivity extends AppCompatActivity {
    @BindView(R.id.imageView)
    //绑定ImageView 控件 
    public ImageView imageView;
    @BindBitmap(R.mipmap.ic_launcher)
    //绑定Bitmap 资源 
    public Bitmap image_bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定activity 
        ButterKnife.bind(this);
        imageView.setImageBitmap(image_bitmap);
    }
}
7.绑定一个颜色值:@BindColor()
public class MainActivity extends AppCompatActivity {
    @BindView(R.id.button)
    //绑定一个控件 
    public Button button;
    //绑定一个颜色值
    @BindColor(R.color.colorAccent)
    int color;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定activity 
        ButterKnife.bind(this);
        button.setTextColor(color);
    }
}
8.绑定控件点击事件:@OnClick()
绑定控件长点击事件:@OnLongClick()
public class MainActivity extends AppCompatActivity {
    @OnClick(R.id.button)
    //给 button1 设置一个点击事件 
    public void showToast() {
        Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
    }

    @OnLongClick(R.id.button2)
    //给 button1 设置一个长按事件 
    public boolean showToast2() {
        Toast.makeText(this, "long click", Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定activity 
        ButterKnife.bind(this);
    }
}
ButterKnife插件
Studio中给我们提供了ButterKnife插件,如何添加插件呢?首先我们需要打开
Studio中的Preferences(Mac下是Preferences,Windows下是Settings),选择Plugins在
右边的搜索框中输入ButterKnife。此时搜索框下会出现很多有关于ButterKnife,在这里
选择Android ButterKnife Zelezny并下载。下载完成后重启Studio就好了。(如果不需要
使用可以不下载插件,建议使用)
Zelezny:ButterKnife插件使用
插件安装


如何使用插件呢?
安装完成后会提示AS,此时重启Studio,可以写一个布局并创建一个代码测试类,
测试的过程中要注意的是需要将光标移到以下代码中的布局activity_main上然后右键点击
选择Generate,此时就会看到ButterKnife,要注意光标一点要放在布局上点击右键
		setContentView(R.layout.activity_main);

这里需要注意的是在勾选控件的界面上,有一个CreateViewHolder ,
这个是专门为ListView或者RecyclerView的适配器ViewHolder内部类专门提供的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值