ViewBinding上手实践demo
一、问题背景
日前看了一个GitHub的小项目,涉及到的技术主要是viewBinding和视图组件进行交互、firebath的在线数据库等,感觉还挺有意思。简单介绍下这个viewbinding。
二、问题介绍
在Android&Kotlin语言进行的原生应用开发过程中,组件过多,使用findViewById的方式拿到想要的组件是一件很麻烦和重复的事情,有很多方式对这个进行简化 1)早有ButterKnife,不过已经被作者标记为Deprecated,不被推荐使用; 2)JetPack中的组件:DataBinding,最强大的是它的双向数据绑定,其底层通过Annotation Processor实现的,最近也是在研究jetpeck库,晚点儿会写篇文章介绍下这个。 3)ViewBinding : 视图绑定,使用上感觉更方便,更爽,效率更高。
三、环境要求
这是官方在3.6版本以上推出的,因此要求AndrodiStudio和Gradle版本>=3.6
四、实现demo
1)开启功能 在App module下的Build.gradle中做启用,这个开关是module级别的
android {
....
viewBinding {
enabled = true
}
...
}
2)新建我们activity并且编写对应的layout布局文件,我的布局文件如下,就一个文本框,一个按钮,比较简单
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".activity.ViewBindingActivity">
<TextView
android:id="@+id/txt1"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn1"
android:text="btn1"
android:textAllCaps="false"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3)activity代码如下,可以看到,基于上面的layout布局,我们可以拿到对应名称的ViewBinding类,:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Toast
class ViewBindingActivity : AppCompatActivity() {
lateinit var activityViewBindingBinding : ActivityViewBindingBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 传统写法
// setContentView(R.layout.activity_view_binding)
// 1、viewBinding的一般写法
activityViewBindingBinding = ActivityViewBindingBinding.inflate(layoutInflater)
setContentView(activityViewBindingBinding.root)
initView()
}
fun initView() {
// 2、直接使用activityViewBindingBinding对象拿到视图中的对应组件
activityViewBindingBinding.txt1.setText("i am txt1");
activityViewBindingBinding.btn1.setOnClickListener {
Toast.makeText(this, "btn1 onclick", Toast.LENGTH_SHORT).show()
}
}
}
五、总结
本文介绍了viewBinding的基本使用,时间所限,viewBinding的原理和高级用法有机会的话后续后进一步总结。