一.使用viewBinding
1.想开启那个模块的viewBinding就进入对应模块的build.gradle
2.进入app的build.gradle
开启viewbinding
viewBinding {
enabled = true
}
3.当你开启viewbinding后,app目录下的所有布局文件都会生成一个绑定类。这个类的类名是以xml布局文件名去掉下换线后,单词首字母大写加上Binding命名的。如activity_main.xml生成的绑定类为ActivityMainBinding.
如果你不想生成绑定类,也很简单,将tools:viewBindingIgnore=“true” 属性添加到相应布局文件的根视图中。
使用就更简单了,如下
package com.example.animationtest
import android.os.Bundle
import android.os.PersistableBundle
import androidx.appcompat.app.AppCompatActivity
import com.example.animationtest.databinding.ConstrainBinding
class Constraint:AppCompatActivity() {
private val viewBinding=ConstrainBinding.inflate(layoutInflater)
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
setContentView(viewBinding.root)
}
}
viewBinding.root就是布局的根布局
二.开发中可能会遇到的场景
1.当A或者C宽度固定或者为wrap_content,你想要B的宽度自适应。
其实这个场景可以分解为:
B.width=屏幕宽度-A.width-C.width(视情况可能还会减去margin或padding)
如果用约束布局就要用android:layout_width="0dp"来解决这个问题,那就是把B的宽度设置为0dp。
如下
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/text_a"
android:layout_width="40dp"
android:layout_height="wrap_content"