首页 > 其他分享 >Android 的ViewBinding实现的原理

Android 的ViewBinding实现的原理

时间:2023-10-13 19:07:00浏览次数:27  
标签:ViewBinding 布局 视图 生成 ActivityMainBinding 原理 Android

Android ViewBinding 是一种用于替代传统的 findViewByIdfindViewById 的视图绑定方法。它允许你以类型安全的方式访问应用布局中的视图元素,而无需手动查找它们。ViewBinding 的实现原理如下:

  1. 布局文件解析:在编译期间,Android Gradle 插件会扫描项目中的布局文件(XML 文件),并为每个布局文件生成一个对应的 ViewBinding 类。这个类的名称与布局文件的名称相关联,通常以驼峰命名法,例如,如果你的布局文件名为 activity_main.xml,则生成的 ViewBinding 类名为 ActivityMainBinding
  2. 生成绑定类:为每个布局文件生成的 ViewBinding 类包含对布局中每个具名视图元素的引用,这些引用的名称通常与 XML 中的 android:id 属性名称相同,但采用了驼峰命名法。这个生成的类会在 build/generated/data_binding_base_class_source_out/debug/out 目录下的 your/package/name/databinding 中找到。
  3. 绑定视图:在你的代码中,你可以通过调用 inflate 方法或 bind 方法来创建 ViewBinding 对象,这将返回与特定布局相关的 ViewBinding 实例。例如,如果你有一个名为 activity_main.xml 的布局,你可以通过以下方式创建 ActivityMainBinding
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
// 或者
ActivityMainBinding binding = ActivityMainBinding.bind(rootView);

这将返回一个包含布局中所有视图引用的 ActivityMainBinding 对象。

  1. 使用 ViewBinding:一旦你有了 ViewBinding 对象,你可以使用它来访问布局中的视图元素。例如,如果你的布局包含一个名为 textView 的 TextView,你可以这样访问它:
binding.textView.setText("Hello, ViewBinding!");
  1. 编译时检查:ViewBinding 在编译时执行,这意味着它提供了类型安全的访问,如果你尝试访问布局中不存在的视图或使用不匹配的数据类型,编译器将会报错。

总之,Android ViewBinding 的实现原理基于编译时生成的 ViewBinding 类,这些类包含对布局中视图元素的引用,以实现类型安全的视图访问,从而简化了 Android 应用的视图绑定过程。这不仅减少了样板代码,还降低了运行时查找视图的开销。

要查看生成的 ActivityMainBinding 类,你可以在 Android Studio 中导航到项目文件目录中的 build/generated/data_binding_base_class_source_out/debug/out 文件夹(或与你的 build variant 相关的目录,比如 release)。在该目录下,你应该能够找到生成的 ViewBinding 类。

通常,生成的 ViewBinding 类会在以下位置:

app/build/generated/data_binding_base_class_source_out/debug/out/your/package/name/databinding

请确保替换 your/package/name 为你的应用的实际包名,然后在 databinding 文件夹中查找名为 ActivityMainBinding.java 或与你的布局文件名相关联的类文件。

如果你无法在上述位置找到生成的 ViewBinding 类,可能需要重新构建项目以确保生成了正确的类。在 Android Studio 中,你可以尝试执行 "Build" -> "Rebuild Project" 操作,以重新生成 ViewBinding 类和其他构建文件。然后,你应该能够在相应的目录中找到 ActivityMainBinding.java 文件。

标签:ViewBinding,布局,视图,生成,ActivityMainBinding,原理,Android
From: https://blog.51cto.com/u_16175630/7850425

相关文章

  • resourcemanager高可用原理
    1.背景一年前写过的一篇文章:https://blog.51cto.com/u_15327484/5046768,介绍了ResourceManager的启动流程。文章中介绍了ResourceManager的选举流程,但是行文逻辑较混乱。本文在此基础上,更清晰地介绍了resourcemanager的高可用原理,希望能够达到小白也能看懂的程度。2.Zookeeper......
  • Spring远程命令执行漏洞(CVE-2022-22965)原理研究
    一、前置知识SpringMVC参数绑定为了方便编程,SpringMVC支持将HTTP请求中的的请求参数或者请求体内容,根据Controller方法的参数,自动完成类型转换和赋值。之后,Controller方法就可以直接使用这些参数,避免了需要编写大量的代码从HttpServletRequest中获取请求数据以及类型转换。这个......
  • VMware Workstation安装安卓Android-X86
    原文:VMwareWorkstation安装安卓Android-X86最新版-..Summer-博客园(cnblogs.com) 进到这个页面的人想毕已经知道 Android-X86 是什么东东,有什么用了,这里就不浪费时间啦,不知道的自己百度吧一、准备工作 官网下载地址:https://www.android-x86.org我这里使用最新版a......
  • android studio配置 compileOnly、implementation、api使用
    implementation:作用是编译同时打包,且当前mudule打包的aar或jar,不能被引用当前module的模块引用。api:作用是编译同时打包,且当前mudule打包的aar或jar,能被引用当前module的模块引用。compileOnly:作用是只编译不打包。比如项目中要引用aarA,如果项目中其他模块已经引用打包过了......
  • EasyMock 使用方法与原理剖析
    https://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/ Mock方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。编写自定义的Mock对象需要额外的编码工作,同时也可能引入错误。Ea......
  • Android WebRTC 编译注意事项
    AndroidWebRTC编译注意事项说明文主要适用于需要从外部C++文件调用WebRTCC++接口的场景本文对应的源码基于m111分支,高版本的也可以参考Android平台用默认参数编译AndroidWebRTC存在的主要问题RTTI默认未开启C++库默认使用了webrtc内部的C++库,与外部C++库abi不兼容,由......
  • Android开发 Jetpack_Compose_7 文字
    前言此篇博客主要讲解Compose里的文字相关的UI功能。文本处理相关的内容与细节较多,此篇博客尽量涵盖完整,所以博客较长需要耐心看完。  官网文档:https://developer.android.google.cn/jetpack/compose/text?hl=zh-cnText文本全部参数这里列出全部参数,下面会一个一个举......
  • ConfigureAwait(false) 原理以及注意事项总结
    解决什么问题?1、避免线程死锁2、可能的性能提升存在的问题:1、当代码在另一个线程上继续时,线程同步上下文将丢失,因为状态机改变。这里最大的损失是你会失去归属于线程的Culture和Language,其中包含了国家语言时区信息,以及来自原始线程的HttpContext.Current之类的信息。因此,如......
  • Android sdkmanager not found. Update to the latest Android SDK and ensure that t
     (base)cloud@Robotbin%flutterdoctor--android-licensesAndroidsdkmanagernotfound.UpdatetothelatestAndroidSDKandensurethatthecmdline-toolsareinstalledtoresolvethis.     ......
  • 高效网络通信技术揭秘,Socket原理与实践
    Socket(套接字)是一种在计算机网络中进行通信的抽象概念。它提供了一种编程接口,使得应用程序能够通过网络进行数据交换。Socket可以在不同的计算机上的进程之间建立连接,实现数据的传输和通信。Socket是一个端点,由IP地址和端口号组成。IP地址指示计算机的位置,而端口号则指定......