从 Android Studio 3.6 开始,视图绑定能够通过生成绑定对象来替代 findViewById,从而可以帮您简化代码、移除 bug,并且从 findViewById 的模版代码中解脱出来。
本文梗概
- 在 build.gradle 中就可以方便快捷地开启视图绑定且无须额外引入依赖库
- 视图绑定会为 Module 中的每一个布局文件生成一个绑定对象
- (activity_awesome.xml → ActivityAwesomeBinding.java)
- 布局文件中每一个带有 id 的视图都会在绑定对象中有一个对应的属性,这个属性将拥有正确的类型,并且空安全
- 视图绑定完美支持 Java 和 Kotlin 编程语言
腾讯视频链接
https://v.qq.com/x/page/h0931mdo8ly.html
Bilibili 视频链接
https:///optimizing-bytecode-by-manipulating-source-code/
对使用 <include> 标签引入的布局会发生什么影响
前面已经讲过,视图绑定会为 Module 下的每一个布局文件生成一个绑定对象,这个说法在布局文件被另一个布局文件使用 <include> 引入时依然适用。
<!-- activity_awesome.xml --><androidx.constraintlayout.widget.ConstraintLayout> <include android:id="@+id/includes" layout="@layout/included_buttons"</androidx.constraintlayout.widget.ConstraintLayout><!-- included_buttons.xml --><androidx.constraintlayout.widget.ConstraintLayout> <Button android:id="@+id/include_me" /></androidx.constraintlayout.widget.ConstraintLayout>△ 视图绑定中使用 include 标签的示例
注意: include 标签下有一个 id。
在使用引入布局的时候,视图绑定会创建一个被引入布局绑定对象的引用。注意 <include> 标签有一个 id: android:id="@+id/includes"。这里的逻辑跟使用普通视图一样, <include> 标签也需要有一个 id 才能在绑定对象中生成对应的属性。
include 标签必须有一个 id,才能生成对应的属性。
public final class ActivityAwesomeBinding implements ViewBinding { ... @NonNull public final IncludedButtonsBinding includes;视图绑定会在 ActivityAwesomeBinding 中生成一个 IncludedButtonsBinding 的引用。
结合数据绑定来使用视图绑定
视图绑定只是 findViewById 的取代方案,如果您希望在 XML 中自动绑定视图,可以使用数据绑定库。数据绑定和视图绑定可以生成同样的组件,它们可以同时工作。
在两者都被开启时,使用 <layout> 标签的布局会由数据绑定来生成绑定对象;而其余的布局则由视图绑定生成绑定对象。
您可以在同一 Module 中同时使用数据绑定和视图绑定。
我们之所以开发视图绑定作为数据绑定的补充,是因为许多开发者反映说,希望有一个轻量的解决方案,能在数据绑定之外替代 findViewById——视图绑定提供的正是这一功能。
数据绑定
https://developer.android.google.cn/topic/libraries/data-binding
视图绑定对比 Kotlin 合成方法与 ButterKnife
关于视图绑定,一个最常见的问题是: "我是否应该用视图绑定替代 Kotlin 合成方法或 ButterKnife ? " 二者都是目前十分成功的组件库,有许多应用使用它们解决 findViewById 的问题。
对于大多数应用来说,我们推荐尝试使用视图绑定来替代这两个库,因为视图绑定可以提供更加安全和准确的视图映射方式。
△ 视图绑定空安全、只引用当前布局中的视图、支持 Java 和 Kotlin,同时也更简洁
上图为对比视图绑定、ButterKnife 和 Kotlin 合成方法的功能。
虽然 ButterKnife 会在运行时校验可空与不可空,但是编译器并不会检查您匹配的视图是否在存在于您的布局之中。
为了安全性与更简洁代码,我们推荐尝试使用视图绑定。
总结
到此这篇关于Android Studio 3.6中使用视图绑定替代 findViewById的方法的文章就介绍到这了,更多相关使用视图绑定替代 findViewById内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!