viewBinding的優(yōu)勢(shì):空安全、只引用當(dāng)前布局中的視圖、支持 Java 和 Kotlin,同時(shí)也更簡(jiǎn)潔
1. 引入
嘗試升級(jí)as到3.6.1或以上版本, 并升級(jí)到如下配置或更高版本。
gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
build.gradle
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
}
}
android {
viewBinding {
enabled = true
}
}
2. 在 Activity 中使用視圖綁定
假如您有一個(gè)布局文件名叫activity_main.xml,viewBinding會(huì)為這個(gè)布局生成一個(gè)名叫 ActivityMainBinding 的類,布局文件中所有擁有 id 的視圖,都會(huì)在這個(gè)類中有一個(gè)對(duì)應(yīng)的屬性:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
// 在 Activity 的 onCreate 方法中,要將 root 傳入 setContentView 方法,從而讓 Activity 可以使用綁定對(duì)象中的布局。
setContentView(binding.root)
binding.title.text = "Hello"
binding.subtext.text = "Concise, safe code"
binding.button.setOnClickListener { /* ... */ }
}
對(duì)使用include標(biāo)簽引入的布局,viewBinding會(huì)為 Module 下的每一個(gè)布局文件生成一個(gè)綁定對(duì)象,這個(gè)說法在布局文件被另一個(gè)布局文件使用 include 引入時(shí)依然適用。
include 標(biāo)簽也需要有一個(gè) id 才能在綁定對(duì)象中生成對(duì)應(yīng)的屬性。
<include
android:id="@+id/includes"
layout="@layout/included_buttons"/>
在使用引入布局的時(shí)候,視圖綁定會(huì)創(chuàng)建一個(gè)被引入布局綁定對(duì)象的引用。
public final class ActivityMainBinding implements ViewBinding {
...
@NonNull
public final IncludedButtonsBinding includes;