- 在app目录下的build.gradle文件中开启viewBinding,开启方式跟DataBinding类似,其中
apply plugin: 'kotlin-android-extensions'
是启用绑定机制
,跟 ViewBinding 功能类似,都是kotlin自动的
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions' // 启用绑定机制
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.myviewbinding"
minSdkVersion 26
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// 启动ViewBinding
viewBinding {
enabled true
}
// 启动DataBinding
/*dataBinding {
enabled true
}*/
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
...
通过gradle插件会生成对应的binding文件,比如布局xml文件名为activity_main.xml,对应生成的binding文件名为ActivityMainBinding
package com.example.myviewbinding
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myviewbinding.databinding.ActivityMainBinding
// 绑定机制
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var vb : ActivityMainBinding ?= null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 绑定机制
/*
setContentView(R.layout.activity_main)
tv1.text = "AAA"
tv2.text = "BBB"
*/
// ViewBinding 面向对象思想
vb = ActivityMainBinding.inflate(layoutInflater)
setContentView(vb!!.root)
vb!!.tv1.text = "AAA"
vb!!.tv2.text = "BBB"
}
}
绑定机制的缺点
:开发人员可能会在类中导入其他xml布局文件的控件属性,从而导致不易察觉的错误