Android注解——Butter Knife的使用
16lz
2021-01-24
Butter Knife介绍
Butter Knife 是Android系统的View注入框架(依赖注入),通过注解(Annotation)绑定Android中View的属性和方法,减少findViewById(),setOnClickListener()的使用。
GitHub地址:https://github.com/JakeWharton/butterknife
Butter Knife优点
- 简化代码,提升开发效率(强大的View绑定和Click事件处理功能)
- 方便处理Adapter里的ViewHolder绑定问题
- 代码清晰,可读性强,配置简单
Butter Knife的使用
安装Android ButterKnife Zelezny 插件
打开Android Studio—>Settings—>Plugins—>搜索Android ButterKnife Zelezny,点击安装,重启AS生效。
添加依赖
在Android Studio项目 build.gradle(Project:项目名称)文件中引入:
buildscript { ... mavenCentral() } dependencies { classpath 'com.jakewharton:butterknife-gradle-plugin:8.7.0' }}
在 build.gradle(Module.app)文件中引入:
dependencies { ... compile 'com.jakewharton:butterknife:8.7.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'}
代码示例
编写activity_main.xml中的代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:textAllCaps="false" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textSize="18sp" />LinearLayout>
生成注解:
使用快捷键生成注解,选中布局文件—>Alt+Insert,如图:
选中Generate Butterknife Injections,如图:
MainActivity.java中的代码如下:
public class MainActivity extends AppCompatActivity { @BindView(R.id.btn) Button btn; @BindView(R.id.tv) TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //绑定Activity ButterKnife.bind(this); } // 绑定监听事件,比如点击事件 @OnClick(R.id.btn) public void clickBtn() { tv.setText("Hjw"); }}
非Activity中使用 Butter Knife
在Fragment中使用Butter Knife
public class MyFragment extends Fragment { @BindView(R.id.btn) Button btn; @BindView(R.id.tv) TextView tv; Unbinder unbinder; public MyFragment() { // Required empty public constructor } @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(); }}
在Adapter中使用Butter Knife
public class MyAdapter extends BaseAdapter { ... @Override public View getView(int position, View view, ViewGroup parent) { ViewHolder holder; if (view != null) { holder = (ViewHolder) view.getTag(); } else { view = layoutInflater.inflate(R.layout.item_listview, parent, false); holder = new ViewHolder(view); view.setTag(holder); } holder.img.setImageResource(R.mipmap.ic_launcher); return view; } static class ViewHolder { @BindView(R.id.img) ImageView img; ViewHolder(View view) { ButterKnife.bind(this, view); } }}
了解更多用法,请见官网:https://jakewharton.github.io/butterknife/
总结
本教程主要总结了Butter Knife的配置以及使用,欢迎同学们学习。
更多相关文章
- 安卓在代码中设置TextView的drawableLeft、drawableRight、drawa
- Android(安卓)帧布局(FrameLayout)的理解
- Mac Android(安卓)Studio快捷键
- PHP 和 Android(安卓)MD5 加密出来结果是一样的代码
- Android(安卓)顶部状态栏覆盖到应用之上?
- 开发安卓-android使用webview加载网页无法使用js的问题
- Android(安卓)提升开发效率工具(Template/Plugin)
- Android(安卓)3.0 访问WebService 出现 android.os.NetworkOnMai
- Android(安卓)Studio 3.1.1更新问题Could not get unknown prope