Android开发之Android Studio 3.6新特性之获取控件id的高级方式ViewBinding
一般获取id有如下几种方式:
访问布局控件ID方式 | 优点 | 缺点 |
findViewById | 系统提供有保障 | 特别繁琐代码量大 |
第三方注解 | 快捷简单 | 引用三方可能有不确定因素 |
kotlinx.android.synthetic | 简洁明了方便 | 有空指针安全问题(可以引用整个项目的所有id) |
DataBinding | 配置简单 | activity与fragment布局分别对待要转换布局,容易忘 |
神器《ViewBinding》 | 类似DataBinding配置,无空指针安全,不区分activity与fragment | 暂未发现 |
从上面表格已经举例说明了各大获取布局Id的优缺点,有人问然后ViewBinding就没有缺点?目前暂未发现。
引用官方文档里面的对比说明:也看查看官方文档:Google官方说明
与 findViewById 的区别
与使用 findViewById 相比,视图绑定具有一些很显著的优点:Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。
类型安全:每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。
这些差异意味着布局和代码之间的不兼容性可能会导致编译版本在编译时(而非运行时)失败。与数据绑定库的区别
视图绑定和数据绑定库均会生成可用于直接引用视图的绑定类。不过,这两者之间存在明显差异:数据绑定库仅处理使用 <layout> 代码创建的数据绑定布局。
视图绑定不支持布局变量或布局表达式,因此它不能用于在 XML 中将布局与数据绑定。
ViewBinding使用:
只需要在app的gradle里面的android根目录里面添加如下:(Android Studio 3.6版本及以上)
android {...viewBinding {enabled = true}}
咱们来看看ViewBinding官方使用步骤:
ViewBinding官方使用方法
Android开发之Android Studio 3.6新特性之获取控件id的高级方式ViewBinding相关推荐
- android 巧妙利用反射机制获取控件id,避免大量冗杂的findviewbyid和butterknife注解
android 巧妙利用反射机制获取控件id,避免大量冗杂的findviewbyid和butterknife注解 一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的 ...
- android 获取控件 id 工具,如何使用appium desktop 获取Android APP 控件的id
背景: 随着Android 版本的更新,你会发现我们之前用的最新的版本的Appium 1.5.3无法启动我们的 Android APP 在模拟器为7.0的设备上,所以我们有必要了解如何使用 appiu ...
- Android开发之 Android 的基本组件的概述
Android是一个为组件化而搭建的平台,它的应用是由一些零散的有联系的组件组成,并通过AndroidManifest.xml文件 把它们绑定起来. Android常用的组件有: Activity(活 ...
- Android开发之Android Material Design Toolbar自定义随笔
一.自定义Toolbar的menu: 在menu下新建menu.xml文件,自定义menu的样式: 1 <menu xmlns:android="http://schemas.andr ...
- Android开发之Android性能优化记录
Android 性能优化 Android 中的性能优化在我看来分为以下几个方面:内存优化.布局优化.网络优化.安装包优化: 内存优化: 下一个问题就是: 布局优化: 布局优化的本质就是减少 View ...
- Android开发之android与JS互调 | Android与H5互调(附源码)
我们先看下JS代码: <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...
- android开发之android:padding和android:margin的区别
android:layout_margin:指该控件距离父控件的边距, android:padding: 指该控件内部内容,如文本距离该控件的边距.
- html5新特性表单控件,老生常谈h5新特性1:(表单)
老生常谈h5新特性1:(表单) HTML5新特性 -- 十大新特性 (1)新的语义标签和属性 (2)表单新特性 (3)视频和音频 (4)Canvas绘图 (5)SVG绘图 (6)地理定位 (7)拖放A ...
- Android开发之android studio快捷键大全
AndroidStudio 快捷键大全 编辑相关快捷键 Ctrl+Space 补全代码 ctrl+shift+space 智能代码补全 Ctrl + Shift + Insert 可以选择剪贴板内容并 ...
最新文章
- http几个版本的区别
- java gb13000_浅谈 GB13000
- HTTPS时代已来,你做好准备了吗?
- WebSVN(2.3.1版本)中文注释以及中文路径乱码的解决方法【未完待续】
- Linux之HugePages快速配置
- 为Node.js编写组件的几种方式
- 荒野行动为什么不能获取服务器信息,荒野行动获取服务器信息一直不动 服务器信息0解决方法...
- 淘宝主营类目占比对店铺有哪些影响
- 实施工程师的发展前景
- 在html页面中加入矢量图,在html中引用矢量图
- 数据权限设计思路_权限设计数据权限
- ecplise插入图片太大_PPT文件太大?100M的PPT一秒变18M,这个压缩方法实在绝了
- Android(kotlin)使用距离传感器实现自动息屏亮屏,仿手机通话
- 微信小程序如何引入视频插件,解决文娱资质问题(uni-app 同样适用) 解决bindtimeupdate 不生效问题!
- ORACLE ODBC驱动安装
- 思想一年一年进步才好
- 爬虫【3】URL地址编码
- Kubernetes实战(一):k8s v1.11.x v1.12.x 高可用安装
- 做嵌入式开发,前景怎么样?
- 牛客网 2018校招真题 爱奇艺 最后一位
热门文章
- 从需求到设计,嵌入式产品开发流程
- 《FPGA入门教程》看书随笔——RTL设计
- app图标圆角角度_教你如何绘制风格统一的APP界面图标
- 计算机还是数学竞赛内容吗,除了AMC,数学牛娃还能参加什么高含金量的数学竞赛...
- 洛谷 3953 NOIP2017提高组Day1 T3 逛公园
- luogu P1058 立体图
- Java系列:《Java核心技术 卷一》学习笔记,chapter11 记录日志
- 对于牛老师作业陈老师作业补充(老陈、小石头的典型用户、用例图、场景)...
- 逻辑斯蒂(logistic)回归深入理解、阐述与实现
- Spring加载resource时classpath*:与classpath:的区别(转)