Android 使用View Binding的方法详解

 更新时间:2020年03月15日 08:45:19   作者:zengd0  
View Binding是一项功能,使您可以更轻松地编写与视图交互的代码。在模块中启用视图绑定后,它将为该模块中存在的每个XML布局文件生成一个绑定类。这篇文章主要介绍了Android 使用View Binding的方法,需要的朋友可以参考下

前言

Android Studio稳定版发布了3.6版本,带来了一些新变化:首先外观,启动页变了,logo改了,更显现代化;增加Multi Preview功能,能同时预览多个尺寸屏幕的显示效果;模拟器支持多屏;也终于支持全新的视图绑定组件View Binding;等。

之前我们与视图交互的方式有findViewById、kotlin中引入Android Kotlin Extensions后直接通过id进行访问。前者模板化严重,重复代码多;后者最为方便。现在有了新的选择–View Binding,官方解释:

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。

在大多数情况下,视图绑定会替代 findViewById。

使用

View Binding可按模块启用。要在某个模块中启用,在该模块的build.gradle中添加如下配置:

android {
  ...
  viewBinding {
   enabled = true
  }
 }

用法

当某个模块启用View Binding后,系统会为该模块中包含的每个 XML 布局文件各生成一个绑定类。每个绑定类均包含对根视图以及具有id 的所有视图的引用。绑定类的类名是xml的名称后面加“Binding”。

例如,假设某个布局文件名为 比如activity_main.xml:

<LinearLayout ... >
  <TextView android:id="@+id/tvName" />
  <TextView android:text="no id"/>
  <Button android:id="@+id/btnOpen"/>
</LinearLayout>

那么生成的绑定类类名是ActivityMainBinding。这个类有两个成员变量tvName和btnOpen,还包含一个getRoot()方法,返回根视图,此例中返回LinearLayout。

要获取绑定类的实例,可以通过静态 inflate() 方法。

private lateinit var binding: ActivityMainBinding

@Override
fun onCreate(savedInstanceState: Bundle) {
 super.onCreate(savedInstanceState)
 binding = ActivityMainBinding.inflate(inflater)
 setContentView(binding.root)
}

现在,绑定类的实例可用于引用任何视图:

binding.tvName = "name"
binding.btnOpen.setOnClickListener{
 Log.d(TAG,"btnOpen click")
}

区别

  • 与findViewById的区别:空安全和类型安全,不存在因引用了一个错误的id而导致的空指针异常或者类型转换异常。
  • 与databinding的区别:databinding仅处理使用 <layout> 代码创建的数据绑定布局;View Binding不支持布局变量或布局表达式,因此它不能用于在xml中将布局与数据绑定。
  • 与Android Kotlin Extensions的区别:在使用上,后者简单粗暴,直接id进行访问,而View Binding需要创建绑定类的实例;后者有一些不友好的地方,比如相同的id存在于多个xml,容易导错包,如果包导错了,会有可能别的View用错id导致空指针,而View Binding显然不会有这种情况。

总结

如果与findViewById或者其他View注入框架进行选择,建议选择View Binding,代码更为简洁和安全。

如果是使用databinding的项目,可以使用View Binding作为补充,用来处理非<layout>为根标签的xml。(ps:貌似不可能出现这种场景?也应该避免这种场景,毕竟类生成过多会影响build速度和增加安装包体积)

与Android Kotlin Extensions进行选择,目前来看,无最优解,二者都很好,取决于开发者是想开发效率最大化、代码简洁使用方便(Android Kotlin Extensions)还是倾向于稳健、出错几率最小化(View Binding)。

By the way,View Binding目前还不支持include标签引入的xml。View Binding功能的完善、在未来的地位和作用、以及能否超越Android Kotlin Extensions,我们仍需持续关注其后续版本。

到此这篇关于Android 使用View Binding的方法详解的文章就介绍到这了,更多相关android View Binding使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android使用onCreateOptionsMenu()创建菜单Menu的方法详解

    Android使用onCreateOptionsMenu()创建菜单Menu的方法详解

    这篇文章主要介绍了Android使用onCreateOptionsMenu()创建菜单Menu的方法,结合实例形式较为详细的分析了Android基于onCreateOptionsMenu创建菜单的具体步骤与相关操作技巧,需要的朋友可以参考下
    2016-11-11
  • Retrofit2日志拦截器的使用

    Retrofit2日志拦截器的使用

    这篇文章主要介绍了Retrofit2日志拦截器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Android Studio EditText点击图标清除文本内容的实例解析

    Android Studio EditText点击图标清除文本内容的实例解析

    这篇文章主要介绍了Android Studio EditText点击图标清除文本内容的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Android系统中的蓝牙连接程序编写实例教程

    Android系统中的蓝牙连接程序编写实例教程

    这篇文章主要介绍了Android系统中的蓝牙连接程序编写实例教程,包括蓝牙的设备查找及自动配对等各种基础功能的实现,十分给力,需要的朋友可以参考下
    2016-04-04
  • android绘制几何图形的实例代码

    android绘制几何图形的实例代码

    这篇文章主要为大家详细介绍了android绘制几何图形的实例代码 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android实现淘宝商品列表切换效果

    Android实现淘宝商品列表切换效果

    这篇文章主要为大家详细介绍了Android实现淘宝商品列表切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 百度地图实现小车规划路线后平滑移动功能

    百度地图实现小车规划路线后平滑移动功能

    这篇文章主要介绍了百度地图实现小车规划路线后平滑移动功能,本文是小编写的一个demo,通过效果图展示的非常直白,需要的朋友可以参考下
    2020-01-01
  • Android动画之TranslateAnimation用法案例详解

    Android动画之TranslateAnimation用法案例详解

    这篇文章主要介绍了Android动画之TranslateAnimation用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Android使用ContentProvider实现跨进程通讯示例详解

    Android使用ContentProvider实现跨进程通讯示例详解

    这篇文章主要为大家介绍了Android使用ContentProvider实现跨进程通讯示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Android创建简单发送和接收短信应用

    Android创建简单发送和接收短信应用

    收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持。今天我们开始自己创建一个简单的发送和接收短信的应用,需要的朋友可以参考下
    2016-04-04

最新评论