一、配置说明
作用位置
需在模块级
build.gradle
或build.gradle.kts
文件的android {}
块内添加:android {buildFeatures {viewBinding = true // Kotlin DSL 语法} }
android {buildFeatures {viewBinding true // Groovy 语法} }
生成规则
为每个 XML 布局文件(如
activity_main.xml
)生成对应的绑定类(如ActivityMainBinding
)。绑定类包含布局中所有带
android:id
的视图引用,无需手动调用findViewById()
。
忽略特定布局
若无需为某布局生成绑定类,可在其根节点添加:
<LinearLayout...tools:viewBindingIgnore="true">
</LinearLayout>
二、使用示例
1. Activity 中绑定视图
class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root) // 设置根视图// 直接访问视图(类型安全 & 空安全)binding.textView.text = "Hello, View Binding!"binding.button.setOnClickListener { Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show()}}
}
2. Fragment 中绑定视图(避免内存泄漏)
class ExampleFragment : Fragment() {private var _binding: FragmentExampleBinding? = nullprivate val binding get() = _binding!! // 非空断言override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {_binding = FragmentExampleBinding.inflate(inflater, container, false)return binding.root}override fun onViewCreated(view: View, savedInstanceState: Bundle?) {binding.textView.text = "Fragment Loaded"}override fun onDestroyView() {super.onDestroyView()_binding = null // 释放视图引用}
}
三、核心优势
特性 | 说明 |
---|---|
类型安全 | 自动推断视图类型(如 |
空安全 | 仅绑定布局中声明 |
性能优化 | 编译时生成代码,无运行时反射开销,比 |
代码简洁 | 一行绑定代替多次 |
五、与 DataBinding 对比
特性 | View Binding | Data Binding |
---|---|---|
视图绑定 | ✅ | ✅ |
数据绑定 | ❌ | ✅(支持 |
双向绑定 | ❌ | ✅ |
性能开销 | ⚡️ 接近零开销 | ⚠️ 较高(需处理表达式逻辑) |
适用场景 | 纯 UI 操作 | 数据驱动 UI(如 MVVM 架构) |