当前位置:   article > 正文

Android的控件绑定----ViewBinding_提示标签尺寸 位置 控件绑定

提示标签尺寸 位置 控件绑定

在Android开发中,控件的绑定是开发者无法绕开的一道程序。是Android开发中最原始,也是最基础的一种获取View的方法。在一个复杂布局的页面时,我们要一个个控件去调用findViewById方法去绑定,代码量会增多。那有什么方法能让我们findView更简单些呢,也让我们的代码能变得更加简洁,请往下看:

·ViewBinding

ViewBinding是Google在2019年I/O大会上公布的一款Android视图绑定工具,也是Google强烈推荐我们使用的。

原理:Google在Android gradle插件中增加了新功能,当某个module开启ViewBind功能后,编译的时候就去扫描此模块下的layout文件,生成对应的binding类,findViewById操作就是在这个自动生成的类里面完成的。

如何使用:

第一步:确保你的Android Studio是3.6或更高的版本,在对应的项目工程模块的 build.gradle加入以下配置:

  1. android {
  2. ...
  3. buildFeatures{
  4. viewBinding= true
  5. }
  6. }

设置好后Android Studio会自动为我们所编写的每一个布局文件都生成一个对应的Binding类。

第二步:在控件绑定的地方(如:Activity里),布局文件名称是:activity_main,则系统会自动生成一个ActivityMainBinding的类,通过这个类,我们就可以直接使用布局文件里的控件了,而不用通过一个个去通过findViewById绑定后再使用,如代码中的button1,我们直接通过实例化ActivityMainBinding一个对象binding后,就可以通过binding.button1直接使用这个控件了。

image.png

我们可以看看系统自动生成的ActivityMainBinding里面到底做了什么,如下代码:

  1. // Generated by view binder compiler. Do not edit!
  2. package com.example.kotlinexample.databinding;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.Button;
  7. import android.widget.LinearLayout;
  8. import androidx.annotation.NonNull;
  9. import androidx.annotation.Nullable;
  10. import androidx.viewbinding.ViewBinding;
  11. import com.example.kotlinexample.R;
  12. import java.lang.NullPointerException;
  13. import java.lang.Override;
  14. import java.lang.String;
  15. public final class ActivityMainBinding implements ViewBinding {
  16. @NonNull
  17. private final LinearLayout rootView;
  18. @NonNull
  19. public final Button button1;
  20. private ActivityMainBinding(@NonNull LinearLayout rootView, @NonNull Button button1) {
  21. this.rootView = rootView;
  22. this.button1 = button1;
  23. }
  24. @Override
  25. @NonNull
  26. public LinearLayout getRoot() {
  27. return rootView;
  28. }
  29. @NonNull
  30. public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater) {
  31. return inflate(inflater, null, false);
  32. }
  33. @NonNull
  34. public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
  35. @Nullable ViewGroup parent, boolean attachToParent) {
  36. //这里把布局文件加载进来了
  37. View root = inflater.inflate(R.layout.activity_main, parent, false);
  38. if (attachToParent) {
  39. parent.addView(root);
  40. }
  41. return bind(root);
  42. }
  43. @NonNull
  44. public static ActivityMainBinding bind(@NonNull View rootView) {
  45. // The body of this method is generated in a way you would not otherwise write.
  46. // This is done to optimize the compiled bytecode for size and performance.
  47. int id;
  48. missingId: {
  49. id = R.id.button1;
  50. //这里加载控件
  51. Button button1 = rootView.findViewById(id);
  52. if (button1 == null) {
  53. break missingId;
  54. }
  55. return new ActivityMainBinding((LinearLayout) rootView, button1);
  56. }
  57. String missingId = rootView.getResources().getResourceName(id);
  58. throw new NullPointerException("Missing required view with ID: ".concat(missingId));
  59. }
  60. }

可以看到,ActivityMainBinding这个类其实也是通过findViewById加载控件的,只是它在内部已经帮我们加载好了,我们直接调用就可以了

注意!!!有时候我们可能不想某些布局文件生成它对应的Binding类,这个时候我们就可以在这个布局文件的根元素位置加入如下声明:

image.png

以上就是ViewBinding的简单使用,要是有写得不对的地方,也很高兴大家多多指教。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/319907?site
推荐阅读
相关标签
  

闽ICP备14008679号