跳到主要内容

viewBinding

开启viewbinding

buildFeatures {
viewBinding = true
}

xml示例如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".ViewBindingActivity">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="hello world" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="点击" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="测试文字1" />

</LinearLayout>

生成viewbing类 并直接使用

private ActivityViewBindingBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityViewBindingBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());

binding.button.setOnClickListener(v -> {
binding.textView.setText("binding view");
});

Window window = getWindow();

this.findViewById(R.id.button);
}

在fragment中使用

binding = FragmentViewBindingBinding.inflate(inflater, container, false);
View view = binding.getRoot();
binding.linearLayout.setGravity(17);
ViewGroup.LayoutParams params = binding.linearLayout.getLayoutParams();
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
binding.linearLayout.setLayoutParams(params);
binding.button.setOnClickListener(this);
return view;

总结

viewbinding是生成一个viewbinding的绑定类,直接使用绑定类的属性就可以,无需使用findviewbyId寻找了。