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,我们仍需持续关注其后续版本。
2020年11月11日更新:Android Stuidio 4.1及以上版本,新创建的项目已默认移除kotlin-android-extensions插件。
所以建议使用:
findViewById
ViewBinding
Databinding
Android View Binding使用介绍相关推荐
- Android View Binding的使用
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120751996 本文出自[赵彦军的博客] 文章目录 什么是View Binding ...
- Android Data Binding 详细介绍与使用
构建环境 首先,确保能使用Data Binding,需要下载最新的 Support repository.否则可能报错,如图: 在模块的build.gradle文件中添加dataBinding配置 a ...
- android textview layoutparams,android.view.ViewGroup.LayoutParams介绍
public static class ViewGroup.LayoutParams extends Object java.lang.Object ↳ android.view.ViewGroup. ...
- Android之WindowManager.LayoutParams介绍
image.png .. LayoutParams WindowManager.LayoutParams 是 WindowManager 接口的嵌套类:继承于 ViewGroup.LayoutPara ...
- Android View体系(一)视图坐标系
http://blog.csdn.net/itachi85/article/details/50708391 前言 Android View体系是界面编程的核心,他的重要性不亚于Android四大组件 ...
- Android SO逆向1-ARM介绍
原文: http://drops.wooyun.org/mobile/10009 0x00 概述 把之前学习SO逆向的笔记分享出来,内容比较简单,大牛就可以略过了. 0x01 ARM寄存器 1.1.通 ...
- Android View坐标系
转载自[http://blog.csdn.net/itachi85/article/details/50708391] 前言 Android View体系是界面编程的核心,他的重要性不亚于Androi ...
- Android的DataBinding原理介绍
Activity在inflate layout时,通过DataBindingUtil来生成绑定,从代码看,是遍历contentView得到View数组对象,然后通过数据绑定library生成对应的Bi ...
- Android常用类库包介绍
为什么80%的码农都做不了架构师?>>> 在Android 类库中,各种包写成android.*的方式,重要包的介绍如下: android.app:提供高层的程序模型.提供基本 ...
最新文章
- Angular 4+ HttpClient
- 实现隐藏窗体而非关闭的方法
- 【避坑】初次接项目的血与泪,扎坑了老
- .NET EFCore之增删改查
- 利用Photoshop减小照片景深
- SharePoint 2007有性能问题? 先试试这篇.
- jsp访问web-inf下的spring配置文件
- ibatis.net:尽可能的使用匿名类型替换 Hashtable
- wps 宏 禁用_WPS表格如何解除宏禁用
- python实现添加商品至购物车
- OneDrive配合OneIndex搭建自用网盘
- 树莓派cups搭建无线打印机(HP Laserjet 1020)
- C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
- Web大学生网页作业成品 基于HTML+CSS+JavaScript个人简历介绍 学生个人网站作业设计代做 学生个人网页设计作品
- Monkey框架(测试方法篇) - monkey测试实例
- python中var是什么变量_python变量
- 第2章 - 论题和结论是什么 (了解论题)
- java输出语句没有输出,JAVA语句输出问题
- 股豆网:2019全国高校名单公布共计2956所 江苏省数量最多
- 【ONION勒索软件】Win10系统防护ONION勒索病毒的详细步骤