前言

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,我们仍需持续关注其后续版本。

2020年11月11日更新:Android Stuidio 4.1及以上版本,新创建的项目已默认移除kotlin-android-extensions插件。

所以建议使用:

  • findViewById

  • ViewBinding

  • Databinding

Android View Binding使用介绍相关推荐

  1. Android View Binding的使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120751996 本文出自[赵彦军的博客] 文章目录 什么是View Binding ...

  2. Android Data Binding 详细介绍与使用

    构建环境 首先,确保能使用Data Binding,需要下载最新的 Support repository.否则可能报错,如图: 在模块的build.gradle文件中添加dataBinding配置 a ...

  3. android textview layoutparams,android.view.ViewGroup.LayoutParams介绍

    public static class ViewGroup.LayoutParams extends Object java.lang.Object ↳ android.view.ViewGroup. ...

  4. Android之WindowManager.LayoutParams介绍

    image.png .. LayoutParams WindowManager.LayoutParams 是 WindowManager 接口的嵌套类:继承于 ViewGroup.LayoutPara ...

  5. Android View体系(一)视图坐标系

    http://blog.csdn.net/itachi85/article/details/50708391 前言 Android View体系是界面编程的核心,他的重要性不亚于Android四大组件 ...

  6. Android SO逆向1-ARM介绍

    原文: http://drops.wooyun.org/mobile/10009 0x00 概述 把之前学习SO逆向的笔记分享出来,内容比较简单,大牛就可以略过了. 0x01 ARM寄存器 1.1.通 ...

  7. Android View坐标系

    转载自[http://blog.csdn.net/itachi85/article/details/50708391] 前言 Android View体系是界面编程的核心,他的重要性不亚于Androi ...

  8. Android的DataBinding原理介绍

    Activity在inflate layout时,通过DataBindingUtil来生成绑定,从代码看,是遍历contentView得到View数组对象,然后通过数据绑定library生成对应的Bi ...

  9. Android常用类库包介绍

    为什么80%的码农都做不了架构师?>>>    在Android 类库中,各种包写成android.*的方式,重要包的介绍如下: android.app:提供高层的程序模型.提供基本 ...

最新文章

  1. Angular 4+ HttpClient
  2. 实现隐藏窗体而非关闭的方法
  3. 【避坑】初次接项目的血与泪,扎坑了老
  4. .NET EFCore之增删改查
  5. 利用Photoshop减小照片景深
  6. SharePoint 2007有性能问题? 先试试这篇.
  7. jsp访问web-inf下的spring配置文件
  8. ibatis.net:尽可能的使用匿名类型替换 Hashtable
  9. wps 宏 禁用_WPS表格如何解除宏禁用
  10. python实现添加商品至购物车
  11. OneDrive配合OneIndex搭建自用网盘
  12. 树莓派cups搭建无线打印机(HP Laserjet 1020)
  13. C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
  14. Web大学生网页作业成品 基于HTML+CSS+JavaScript个人简历介绍 学生个人网站作业设计代做 学生个人网页设计作品
  15. Monkey框架(测试方法篇) - monkey测试实例
  16. python中var是什么变量_python变量
  17. 第2章 - 论题和结论是什么 (了解论题)
  18. java输出语句没有输出,JAVA语句输出问题
  19. 股豆网:2019全国高校名单公布共计2956所 江苏省数量最多
  20. 【ONION勒索软件】Win10系统防护ONION勒索病毒的详细步骤

热门文章

  1. m420c节能证书下载_节字标志认证证书节能产品认证证书4.PDF
  2. css设置图片不显示的原因总结
  3. spring源码分析02-spring生命周期源码解析
  4. 陪王思聪刷了一年微博,他赚了几个亿,你呢?
  5. 【转】我的技术学习方法 — Anytao
  6. 关系运算符lt, gt全拼
  7. 【愚公系列】2022年02月 U3D全栈班 007-制作设置天空盒资源
  8. 校园网常见故障及解决方案
  9. 处理数码照片的计算机需要配置,不仅要懂PS 浅谈修图电脑配置(基础篇)
  10. S32K1XX调试--irda红外通信