Android Studio ViewBinding绑定视图控件

Android 中 ViewBinding(视图绑定)的具体用法,这是替代 findViewById 的官方推荐方案,能让你更安全、更高效地访问布局中的控件

ViewBinding 的核心优势是编译时类型安全(避免因控件 id 写错导致运行时崩溃)、无需手动强转控件类型,且使用简单。下面分步骤讲解完整用法。

一、第一步:启用 ViewBinding

首先需要在项目的 build.gradle 中开启 ViewBinding 功能,不同 Android Gradle 插件版本配置略有差异,这里提供通用写法:

1. 模块级 build.gradle(app 目录下)
Kotlin 复制代码
android {
    ...
    buildFeatures {
        // 启用 ViewBinding
        viewBinding true
        // 如果同时用了 DataBinding,需要这样写:
        // dataBinding true
        // viewBinding true
    }

    // 可选:排除某些布局不生成 ViewBinding 类(比如测试布局)
    // viewBinding {
    //     exclude "layout/activity_test.xml"
    // }
}

注意:配置完成后,点击 Sync Now 同步项目,Android Studio 会自动为每个布局文件生成对应的 Binding 类(比如 activity_main.xml 生成 ActivityMainBinding)。(Sync Now在页面左上方)

二、第二步:在 Activity 中使用 ViewBinding

activity_main.xml 为例,演示 Activity 中如何使用 ViewBinding 访问控件:

1. 基础用法(最常用)
Kotlin 复制代码
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
// 导入自动生成的 Binding 类(AS 会自动提示)
import com.example.yourprojectname.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    // 声明 Binding 对象(lateinit 表示延迟初始化)
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 1. 初始化 Binding 对象,替代 setContentView
        binding = ActivityMainBinding.inflate(layoutInflater)
        // 2. 获取根布局并设置为 Activity 内容
        setContentView(binding.root)

        // 3. 直接通过 binding.控件id 访问控件(无需 findViewById)
        // 比如布局中有一个 id 为 tv_title 的 TextView、id 为 btn_click 的 Button
        binding.tvTitle.text = "ViewBinding 测试标题"
        binding.btnClick.setOnClickListener {
            // 点击事件
            binding.tvTitle.text = "按钮被点击了!"
        }
    }
}
2. 关键说明
  • 生成的 Binding 类命名规则:布局文件名去掉下划线,首字母大写 + Binding(比如 fragment_home.xmlFragmentHomeBinding)。
  • binding.root 对应布局的根控件(比如 LinearLayout/ConstraintLayout),等价于 setContentView(R.layout.activity_main)
  • 控件访问:布局中控件的 id 是 tv_title,Binding 类中会自动转为驼峰命名 tvTitle,直接通过 binding.tvTitle 访问。
相关推荐
三少爷的鞋5 小时前
别再靠 Code Review 守底线:我做了一个静态分析项目 RedLine
android
y = xⁿ13 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
2601_9620664915 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
用户693717500138421 小时前
曾经安卓开发人手一个的 EventBus,为什么现在没人爱用了?
android·android studio
九皇叔叔1 天前
MySQL ORDER BY 性能优化详解:Using filesort、联合索引、ASC/DESC 与覆盖索引
android·adb
OriginCoding1 天前
用 AI Agent 协作完成一个 Android TOTP 应用:从需求边界到 v1.0.0
android·ai编程
杉氧1 天前
React 灵魂:深入剖析 Hooks 与副作用(Side Effects)陷阱
android·前端·react native
又见情义1 天前
RK3568 + RTL8211F 网络唤醒(WOL)功能适配全记录
android·网络·驱动开发
用户0934077735141 天前
HarmonyOS WPS Open SDK 实践:registerApp 鉴权与就绪门禁
android·typescript·harmonyos
jike_20261 天前
会议离线录音APP:无网络记录能力对比
android·智能手机·语音识别