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