环境
gradle plugin version:7.2.1
gradle version:7.3.3
android studio version:Chipmunk 2021.2.1 Patch 1
开始
- 新建一个安卓项目,这里有一点结构写出来方便说:
|app
|build.gradle
|build.gradle
- 启用kotlin-kapt插件:
在app/build.gradle里的最顶部。
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt`//这是添加的
}
- 继续在这个文件添加配置
android {
...
kapt {
includeCompileClasspath = false
}
buildFeatures {
viewBinding true
//如果需要下面就取消注释
//dataBinding true
}
}
viewBinding和dataBinding区别:
viewBinding不用在布布局文件转换局文件里额外包裹<layout>标签,直接可以在代码里调用和加载。
dataBinding使用可以将普通布局文件的第一行点击小灯泡转换为该形式,这样的可以使用<<variable>标签,直接在布局里绑定页面数据和如点击事件之类的方法。
<!-- viewBinding -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
<!-- dataBinding -->
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</layout>
- 改变页面绑定方法
旧:setContentView(R.layout.activity_main)
新:ActivityMainBinding.inflate(layoutInflater)
,注意这里是kotlin写法,java为ActivityMainBinding.inflate(getLayoutInflater())
这样子。
fragment里类似,只要有个layoutInflater,就可以初始化个布局。
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
这样,获取里面的子view也很方便。
假定布局内有一个TextView:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>