Android Kotlin开发:如何在Activity中直接调用XML定义的ID无需额外声明变量
无需声明变量直接调用XML控件ID的实现原理
这种功能是Android生态中为了简化findViewById模板代码推出的语法糖,目前有两种主流实现方案:
1. Kotlin Android Extensions 合成视图属性(旧方案,已废弃)
你教程里演示的直接通过ID调用控件的写法,用的就是谷歌早期推出的Kotlin专属扩展功能:
- 实现前提:需要在模块级
build.gradle中引入kotlin-android-extensions插件 - 底层逻辑:
编译阶段插件会自动扫描项目内所有XML布局,为每个带android:id属性的控件生成全局Kotlin扩展属性,属性名和XML中的ID完全一致,属性类型自动匹配对应的控件类。你在Activity中直接调用ID时,本质是调用了插件自动生成的扩展方法,内部已经封装了findViewById逻辑,还会对查找到的控件做缓存,重复调用时不需要二次查找。 - 废弃原因:存在ID重名时引用错误、跨布局调用无空安全提示易崩溃等问题,谷歌在Kotlin 1.4.20之后正式废弃该功能,推荐改用View Binding。
2. View Binding(官方现行推荐方案)
现在谷歌官方推荐的替代方案,原理和前者类似但安全性更高:
- 实现前提:需要在模块级
build.gradle的android配置块中开启配置:
buildFeatures { viewBinding true }
- 底层逻辑:
编译阶段会为每个XML布局生成独立的绑定类,类名为布局名的大驼峰形式加Binding后缀,比如你用的activity_excerise.xml会生成ActivityExceriseBinding类,类中会自动生成布局中所有带ID控件的成员变量,变量名是ID的驼峰形式。你只需要在Activity中初始化绑定类实例,就可以直接通过实例调用所有控件,不需要手动写findViewById,也避免了空安全、类型转换错误的问题。
注:如果遇到教程里的写法在你的项目中无法生效的情况,首先检查拼写是否正确(你示例中XML的ID是
toolbar_excerise_activity,代码里写成了toolbar_exercise_activity多了一个字母),其次确认是否开启了对应插件/配置。
内容的提问来源于stack exchange,提问作者akalanta
相关产品推荐
相关产品推荐

