Android 架构组件之 ViewBinding(视图绑定)

简介

Android 中的 ViewBinding 是Android 的 Jetpack 的一部分。这个框架为的是让大家不用再写出特别多的 findViewById 代码找寻控件。如果使用这个框架,那么框架会为每个xml布局生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
当然在官方文档中有一句这个话:
In most cases, view binding replaces findViewById.
(在大多数情况下,视图绑定会替代 findViewById。)
这里介绍一下,因为 ViewBing 是新出来的原因,所以往往会有些不稳定,出现某些不知道的问题,所以我还是告诫大家:这个毕竟是新的技术,所以在工作中还是不要上手了,在平时的Demo 中可以使用它。

使用

使用说明

ViewBinding 对于 studio 和 gradle 都有限制。都规定需要使用 3.6.0 以上的版本。

开始使用

首先如果需要使用 架构组件,那么大家需要在 project 的build.gradle 中有 google()。(当然这个是在创建应用的时候就会默认有的。)

  repositories {
         google()
        jcenter()
        
    }

如果使用 ViewBinding,需要在 Module 的 build.gradle 中添加如下:

android {
  viewBinding {
        enabled = true
    }
}

或者是

android {
    viewBinding.enabled = true
    }

用法

ViewBinding 在大家设置完之后就可以正式的使用了。
比如应用会默认生成一个 MainActivity 和一个 activity_main.xml 布局。那么大家就可以在代码中如此使用:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(mBinding.root)
    }
}

这里解释一下,它会将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。
如果有一个布局内容如下 :

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView android:id="@+id/textView"
    ...
    />

    <Button android:id="@+id/button"
    ...
    />

    <ImageView android:id="@+id/imageView"
    ...
    />
</androidx.constraintlayout.widget.ConstraintLayout>

这里大家可以看到,这个布局整体是一个 玉树布局,内部有三个控件 TextView ,Button ,ImageView 。他们有着自己各自的id,如果我们想在代码中进行使用,那么我们可以通过之前的 mBinding.控件找到自己所需要控件/.

如果不想让xml 文件生成Binding ,那么大家可以在根布局中添加 tools:viewBindingIgnore=“true” 忽略布局。

ViewBinding 与 findViewById 的区别

与使用 findViewById 相比,视图绑定具有一些很显著的优点:

  • Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。
  • 类型安全 :每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。

ViewBinding 与 DataBinding 的区别

视图绑定和数据绑定库均会生成可用于直接引用视图的绑定类。不过,这两者之间存在明显差异:

  • 数据绑定库仅处理使用 代码创建的数据绑定布局。
  • 视图绑定不支持布局变量或布局表达式,因此它不能用于在 XML 中将布局与数据绑定。

ViewBinding 与 DataBinding 应该使用哪一个?

在官方文档中给出如此的建议:
如果使用的是简单的布局(和数据交互少的布局),那么推荐使用 ViewBinding。
如果使用的是复杂的布局(和数据交互多的布局),那么推荐使用 DataBinding。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值