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绑定
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()不能通过注解实现。
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内部类专门提供的。
ButterKnife是一个Android视图注入框架,简化了findViewById和事件处理代码,提高开发效率。它支持Activity、Fragment及Adapter的 ViewHolder 绑定,并提供控件ID注解、多个ID注解、绑定字符串、数组、颜色、位图等资源的功能。使用时需添加依赖,然后通过注解进行视图绑定,避免使用private或static修饰属性。在Android Studio中,还可以安装ButterKnife Zelezny插件辅助生成代码。
1174

被折叠的 条评论
为什么被折叠?



