视图访问的方式有常用的findViewById,ButterKnife等多种方式,这些方式的各方面对比如下

如上图所示,在简明、编译安全和编译速度上都各有优势,那么有没有一种方式可以一石 "三" 鸟呢。谷歌在Android Studio 3.6 Canary 11版本中正式推出视图绑定(View Binding),来看下使用方法,

首先需要使用AS 3.6 Canary 11之上的版本,这里我们使用AS 3.6 Beta 1(也可以使用最新的AS 4.0 Canary 01),升级gradle plugin版本到3.6.0 beta01

buildscript {……dependencies {classpath "com.android.tools.build:gradle:3.6.0-beta01"}
}

然后在app中开启viewbinding

apply plugin: 'com.android.application'android {……defaultConfig {……viewBinding {enabled = true}}……
}

接下来新建一个布局文件activity_view_binding,内容如下

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:text="111" /><android.support.v7.widget.AppCompatImageViewandroid:id="@+id/image"android:layout_width="0dp"android:layout_height="0dp"android:layout_margin="10dp"app:layout_constraintDimensionRatio="1:1"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/text"app:layout_constraintWidth_percent="0.4" />
</android.support.constraint.ConstraintLayout>

然后在Activity等需要使用布局的类中进行ViewBinding的初始化及使用,如下

public class ViewBindingActivity extends AppCompatActivity {private ActivityViewBindingBinding viewBinding;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);viewBinding = ActivityViewBindingBinding.inflate(LayoutInflater.from(this));setContentView(viewBinding.getRoot());viewBinding.text.setText("view binding");viewBinding.image.setImageResource(R.color.black);}
}

ViewBinding的初始化有三种方式,

inflate(@NonNull LayoutInflater inflater);
inflate(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, boolean attachToParent);
bind(@NonNull View rootView);

ViewBinding不用再手动进行类型转换,也避免了空指针错误。如果不想生成ViewBinding,可以在布局的根视图上使用tools:viewBindingIgnore="true"。

当然ViewBinding现在还是测试阶段,也有很多问题,例如tools:viewBindingIgnore有时会无效;如果你的布局名称比较长的时候,生成的ViewBinding类也比较长,没有自定义生成ViewBinding类名称的方式;视图id比较长的时候,生成的对象名称也比较长。

在Butterknife的github主页上也有这样一段话,

Attention: Development on this tool is winding down. Please consider switching to view binding in the coming months.

看来JakeWharton还是比较推荐自家的ViewBinding,大家可以开始尝试使用,如果有问题可以进行反馈,相信ViewBinding也会越来越强大。

初探ViewBinding相关推荐

  1. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

  2. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  3. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  4. las格式测井曲线_邹榕,等:顺北和托甫台区块奥陶系断裂结构单元测井响应特征初探...

    引用格式:邹榕,徐中祥,张晓明,等.顺北和托甫台区块奥陶系断裂结构单测井响应特征初探[J].油气藏评价与开发,2020,10(2):18-23.ZOUR, XU Z X, ZHANG X M, et ...

  5. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武

    1.来源:<网络表征学习前沿与实践>  崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...

  6. python argparse_Python 命令行之旅:初探 argparse

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 你是否好奇过在命令行中敲入一段命令后,它是如何被解析执行的?是否考虑过由自己实现一个命令行工具,帮你执行和处理任 ...

  7. HTML5+MUI+HBuilder 之初探情人

    07,08年那会儿正当Java火爆,C/C++仍是广泛运用的一门语言的时候,所以我的大学都献给了C/C++和Java.当诺基亚的倒闭成为按键机时代衰落的标志时,移动APP的开发也如破堤之洪.爆炸式的崛 ...

  8. 使用Mahout搭建推荐系统之入门篇3-Mahout源码初探

    2019独角兽企业重金招聘Python工程师标准>>> 用意: 希望了解Mahout中数据的存储方式, 它如何避免java object带来的冗余开销.学完知识,要进行些实战 去分析 ...

  9. SAP RETAIL 补货类型RF之初探 II

    SAP RETAIL 补货类型RF之初探 II 1, 补货参数 – TargetCoverage字段不能为空. 如果不维护这个参数值,系统会提示:Target stock calculated dyn ...

  10. SAP RETAIL 补货类型RF之初探 I

    SAP RETAIL 补货类型RF之初探 I SAP RETAIL系统里,商品主数据里MRP Type字段值如果是RF (Replenish with dyn.TargetStock ), 则系统在自 ...

最新文章

  1. 手动搭建的VGG16网络结构训练数据和使用ResNet50微调(迁移学习)训练数据对比(图像预测+前端页面显示)
  2. java ip包_java网络抓ip包 首部是个什么情况
  3. mkdir()提示No such file or directory错误的解决方法
  4. opencv滤波美颜
  5. java resultset 为空,ResultSet为空的有关问题
  6. 新秀翻译(两)——使用Java通用配置模板方法模式
  7. Java多线程 ——线程基础和锁锁锁
  8. Java 在指定目录中创建文件
  9. Mysql-5.5.3 主从同步不支持master-host问题的解决办法
  10. GIS学习第一课:USGS遥感数据下载
  11. 使用EXCEL连接PGSQL
  12. 从零开始变成一个脚本小子002-初窥密码2
  13. python-windows命令行启动appium及杀掉对应接口进程
  14. 怎样免费将多个pdf文件合并为一个
  15. python读取Excel绘制饼图的两种方式
  16. Ten Places to Go for SharePoint Development Information
  17. 算法91----切绳子
  18. 使用ROT13加密解密
  19. Comet OJ - Contest #6 双倍快乐
  20. 关于地铁计算机联锁的论文,简析南京地铁四号线车辆段计算机联锁主机设计论文...

热门文章

  1. PTA 7-3 愿天下有情人都是失散多年的兄妹 (25 分)
  2. dom影像图形成数字地形图_DOM卫星影像
  3. Access数据库,以及一些其他的库。
  4. python语言基础(傻瓜式文档)
  5. 浅谈~2016的一些亮点!
  6. sofelf转jic
  7. 纯前端实现—点一个小圆圈变四个动画效果
  8. 大数据可视化-Tableau
  9. 电影《失控玩家》:软件2.0,让游戏角色“觉醒”了?
  10. LR性能测试Web Page Breakdown分析篇