ButterKnife 黄色警告

264 阅读2分钟

「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

ButterKnife 黄色警告

前言

在很久以前,大家通过view id 获取到组件的实例,大家都用findById方法,刚开始的时候还要加上类型转换,如(TextView)findById(R.id.tv),后来强制转换去掉了,直接findById(R.id.tv)就可以了,某些程序员为了让广大程序员偷懒,AS插件和注解工具应运而生,其中最著名的就是ButterKnife(黄油刀),用了这么多年一直很爽。 当某天安卓开发工具的版本升级到了北极狐之后,所有关于ButterKnife的开始黄色警告...

ButterKnife官方这么说

logo.png

注意:此工具现已弃用。请切换到 查看绑定。显然,现有版本将继续工作,但只会考虑与 AGP 集成的关键错误修复。功能开发和一般错误修复已停止。

可见ButterKnife 已经停止维护了,并推荐了安卓官方的 视图绑定

视图绑定是什么

就是为了绑定和组件的关系,代替原来的findViewById,据说内部实现还是使用findViewById

AS是否支持视图绑定

视图绑定在 Android Studio 3.6 Canary 11 及更高版本中可用。

那么北极狐算啥版本?

这是因为官方更新了 Android Studio 的版本号,原因是为了和Intellij版本对应。

1.png

北极狐是肯定支持视图绑定了。

开始视图绑定

无论是否使用AndroidX,视图绑定都可以使用。

  1. 启动视图绑定

在app的build文件下


android {

...

viewBinding {

enabled = true

}

}

}

  1. 布局文件声明组件id

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="vertical"

>

<TextView

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

<ImageView

android:id="@+id/image"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

<Button

android:id="@+id/btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

  1. 在Activity中添加绑定操作

private ActivityMainBinding mActivityMainBinding;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mActivityMainBinding = ActivityMainBinding.inflate(LayoutInflater.from(this));

setContentView(mActivityMainBinding.getRoot());

}

注意一定要改变原始的setContentView,将该方法的参数设置成mActivityMainBinding.getRoot(),否则操作不了组件。

  1. 动态操作组件

使用 binding.id名称 进行操作,和以前的方法一样进行操作它。

因为在使用视图绑定之后,在app/build/generated/ 文件夹下会生成关于组件的常量,可以看到内部也是使用findViewById实现的。


mActivityMainBinding.text.setText("测试");

mActivityMainBinding.image.setImageResource(R.mipmap.ic_launcher);

mActivityMainBinding.btn.setText("test");

mActivityMainBinding.btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

}

});

  1. 指定不生成Binding文件

有些布局文件我们不想生成Binding文件,我们就在layout文件中进行设置。在layout的根目录组件下

tools:viewBindingIgnore="true"