初探ViewBinding
视图访问的方式有常用的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相关推荐
- 2021年大数据Flink(九):Flink原理初探
Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...
- 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书
缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...
- 经典算法研究系列:二、Dijkstra 算法初探
经典算法研究系列:二.Dijkstra 算法初探 July 二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...
- las格式测井曲线_邹榕,等:顺北和托甫台区块奥陶系断裂结构单元测井响应特征初探...
引用格式:邹榕,徐中祥,张晓明,等.顺北和托甫台区块奥陶系断裂结构单测井响应特征初探[J].油气藏评价与开发,2020,10(2):18-23.ZOUR, XU Z X, ZHANG X M, et ...
- 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武
1.来源:<网络表征学习前沿与实践> 崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...
- python argparse_Python 命令行之旅:初探 argparse
本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 你是否好奇过在命令行中敲入一段命令后,它是如何被解析执行的?是否考虑过由自己实现一个命令行工具,帮你执行和处理任 ...
- HTML5+MUI+HBuilder 之初探情人
07,08年那会儿正当Java火爆,C/C++仍是广泛运用的一门语言的时候,所以我的大学都献给了C/C++和Java.当诺基亚的倒闭成为按键机时代衰落的标志时,移动APP的开发也如破堤之洪.爆炸式的崛 ...
- 使用Mahout搭建推荐系统之入门篇3-Mahout源码初探
2019独角兽企业重金招聘Python工程师标准>>> 用意: 希望了解Mahout中数据的存储方式, 它如何避免java object带来的冗余开销.学完知识,要进行些实战 去分析 ...
- SAP RETAIL 补货类型RF之初探 II
SAP RETAIL 补货类型RF之初探 II 1, 补货参数 – TargetCoverage字段不能为空. 如果不维护这个参数值,系统会提示:Target stock calculated dyn ...
- SAP RETAIL 补货类型RF之初探 I
SAP RETAIL 补货类型RF之初探 I SAP RETAIL系统里,商品主数据里MRP Type字段值如果是RF (Replenish with dyn.TargetStock ), 则系统在自 ...
最新文章
- 手动搭建的VGG16网络结构训练数据和使用ResNet50微调(迁移学习)训练数据对比(图像预测+前端页面显示)
- java ip包_java网络抓ip包 首部是个什么情况
- mkdir()提示No such file or directory错误的解决方法
- opencv滤波美颜
- java resultset 为空,ResultSet为空的有关问题
- 新秀翻译(两)——使用Java通用配置模板方法模式
- Java多线程 ——线程基础和锁锁锁
- Java 在指定目录中创建文件
- Mysql-5.5.3 主从同步不支持master-host问题的解决办法
- GIS学习第一课:USGS遥感数据下载
- 使用EXCEL连接PGSQL
- 从零开始变成一个脚本小子002-初窥密码2
- python-windows命令行启动appium及杀掉对应接口进程
- 怎样免费将多个pdf文件合并为一个
- python读取Excel绘制饼图的两种方式
- Ten Places to Go for SharePoint Development Information
- 算法91----切绳子
- 使用ROT13加密解密
- Comet OJ - Contest #6 双倍快乐
- 关于地铁计算机联锁的论文,简析南京地铁四号线车辆段计算机联锁主机设计论文...