美文网首页
半天学会Butterknife的简单使用

半天学会Butterknife的简单使用

作者: reaiya | 来源:发表于2018-06-12 18:09 被阅读0次

    1. 准备

    安装依赖

    compile 'com.jakewharton:butterknife:8.5.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    

    安装插件
    Preferences -> Plugins,搜索Android Butterknife Zelezny,点击install

    可能会出现的问题:

    • 提示gradle没有annotationProcessor方法(检查gradle版本,升级到2.2.1+)

    2. 使用

    2.1 使用插件

    在layout资源文件名上面右击,选择Generate -> Generate ButterKnife injections(或者快捷键control+enter),即可选择生成view对应的注解和OnClick

    2.2 手动

    1. 绑定view
        @BindView(R.id.main_text1)
        TextView mainText1;
        @BindView(R.id.main_edit1)
        EditText mainEdit1;
        @BindView(R.id.main_button1)
        Button mainButton1;
    
    1. 点击事件
        @OnClick({R.id.main_text1,R.id.main_edit1,R.id.main_button1})
        public void click(View v) {
            switch (v.getId()){
                case R.id.main_text1:
                    mainText1.setText("Text被点击了。。。");
                    break;
                case R.id.main_edit1:
                    mainText1.setText("Edit被点击了。。。");
                    break;
                case R.id.main_button1:
                    mainText1.setText("Button被点击了。。。");
                    break;
            }
        }
    
    1. 绑定资源
        @BindString(R.string.title) String title;
        @BindDrawable(R.drawable.graphic) Drawable graphic;
        @BindColor(R.color.red) int red; // int 或 ColorStateList field
        @BindDimen(R.dimen.spacer) Float spacer; // int 或 float
    
    1. Fragment中的使用
      在Fragment中使用和在Activity中使用,只有一点不一样:在获取View的时候,加多一个view参数把View绑定到ButterKnife就行了。
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View view = inflater.inflate(R.layout.fragment_my, container, false);
            unbinder = ButterKnife.bind(this, view);
            return view;
        }
    

    在销毁的时候需要解绑

        @Override
        public void onDestroyView() {
            super.onDestroyView();
            unbinder.unbind();
        }
    
    1. Adapter ViewHolder中的使用
        static class ViewHolder{
            @BindView(R.id.item_text1)
            TextView itemText1;
            public ViewHolder(View view) {
                ButterKnife.bind(this, view);
            }
        }
    

    3. 注解列表

    事件注解

    名称 作用
    @OnClick 点击事件
    @OnCheckedChanged 选中,取消选中
    @OnEditorAction 软键盘的功能键
    @OnFocusChange 焦点改变
    @OnItemClick item被点击(注意这里有坑,如果item里面有Button等这些有点击的控件事件的,需要设置这些控件属性focusable为false)
    @OnItemLongClick item长按(返回真可以拦截onItemClick)
    @OnItemSelected item被选择事件
    @OnLongClick 长按事件
    @OnPageChange 页面改变事件
    @OnTextChanged EditText里面的文本变化事件
    @OnTouch 触摸事件
    @Optional 选择性注入,如果当前对象不存在,就会抛出一个异常,为了压制这个异常,可以在变量或者方法上加入一下注解,让注入变成选择性的,如果目标View存在,则注入, 不存在,则什么事情都不做

    绑定注解

    名称 作用
    @BindViews 绑定多个view id为一个view的list变量
    @BindView 绑定一个view id为一个view 变量
    @BindArray 绑定string里面array数组,@BindArray(R.array.city ) String[] citys ;
    @BindBitmap 绑定图片资源为Bitmap,@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;
    @BindBool 绑定真假boolean
    @BindColor 绑定color,@BindColor(R.color.colorAccent) int black;
    @BindDimen 绑定Dimen,@BindDimen(R.dimen.borth_width) int mBorderWidth;
    @BindDrawable 绑定Drawable,@BindDrawable(R.drawable.test_pic) Drawable mTestPic;
    @BindFloat 绑定float
    @BindInt 绑定int
    @BindString 绑定一个String id为一个String变量,@BindString( R.string.app_name ) String meg;

    写于2018-3-31

    相关文章

      网友评论

          本文标题:半天学会Butterknife的简单使用

          本文链接:https://www.haomeiwen.com/subject/bxothftx.html