首先我们需要从Android studio模块编译脚本中加入依赖:
viewBinding {
enabled = true
}
- 如图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200506205232933.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NleHlsdW5h,size_16,color_FFFFFF,t_70)
布局文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200506210222269.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NleHlsdW5h,size_16,color_FFFFFF,t_70)
放置了三个button
<Button
android:layout_below="@+id/id_text01"
android:text="@string/view_binding"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/id_button_1"
></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/id_button_2"
android:layout_below="@id/id_button_1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/id_button_3"
android:layout_below="@id/id_button_2"
android:text="@string/there_"
/>
加载布局
setContentView(R.layout.activity_main);
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setContentView(R.layout.activity_main);
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
获得控件
findViewById(R.id.id_button_3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "我是传统发放除法的", Toast.LENGTH_SHORT).show();
}
});
binding.idButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"2222", Toast.LENGTH_SHORT).show();
}
});
binding.idButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"2222", Toast.LENGTH_SHORT).show();
}
});
findViewById(R.id.id_button_3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "我是传统发放除法的", Toast.LENGTH_SHORT).show();
}
});
需要说明的
首先可以注意到在xml的布局文件里面,控件id的名命都是依靠下划线来进行分割的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200506210313706.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NleHlsdW5h,size_16,color_FFFFFF,t_70)
但是在java代码中调用的时候,却丢失了下划线转化成了驼峰命名。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200506210424906.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NleHlsdW5h,size_16,color_FFFFFF,t_70)
这是因为Android view的优化机制导致的。
如果想要细看的话可以打开自己编译生成的文件。会多出来一个文件就是viewbinding自动生成的文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200506210629841.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NleHlsdW5h,size_16,color_FFFFFF,t_70)
package com.example.learnandroidfromgoogle.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.viewbinding.ViewBinding;
import com.example.learnandroidfromgoogle.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityMainBinding implements ViewBinding {
@NonNull
private final ConstraintLayout rootView;
@NonNull
public final Button idButton1;
@NonNull
public final Button idButton2;
@NonNull
public final RelativeLayout idRelative;
@NonNull
public final TextView idText01;
private ActivityMainBinding(@NonNull ConstraintLayout rootView, @NonNull Button idButton1,
@NonNull Button idButton2, @NonNull RelativeLayout idRelative, @NonNull TextView idText01) {
this.rootView = rootView;
this.idButton1 = idButton1;
this.idButton2 = idButton2;
this.idRelative = idRelative;
this.idText01 = idText01;
}
@Override
@NonNull
public ConstraintLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_main, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityMainBinding bind(@NonNull View rootView) {
String missingId;
missingId: {
Button idButton1 = rootView.findViewById(R.id.id_button_1);
if (idButton1 == null) {
missingId = "idButton1";
break missingId;
}
Button idButton2 = rootView.findViewById(R.id.id_button_2);
if (idButton2 == null) {
missingId = "idButton2";
break missingId;
}
RelativeLayout idRelative = rootView.findViewById(R.id.id_relative);
if (idRelative == null) {
missingId = "idRelative";
break missingId;
}
TextView idText01 = rootView.findViewById(R.id.id_text01);
if (idText01 == null) {
missingId = "idText01";
break missingId;
}
return new ActivityMainBinding((ConstraintLayout) rootView, idButton1, idButton2, idRelative,
idText01);
}
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}
本文参考了以下内容:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)