- 在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 30buildToolsVersion "30.0.3"defaultConfig {applicationId "com.example.myviewbinding"minSdkVersion 26targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"// 启动ViewBindingviewBinding {enabled true}// 启动DataBinding/*dataBinding {enabled true}*/}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}}...
通过gradle插件会生成对应的binding文件,比如布局xml文件名为activity_main.xml,对应生成的binding文件名为ActivityMainBinding
package com.example.myviewbindingimport 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 ?= nulloverride 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布局文件的控件属性,从而导致不易察觉的错误