JetPack Compose简单介绍
它是2019 年 I/O 大会上公布的新的 UI 库,在今年下半年会发布它的正式版。
既然它是一个UI库,那就要和我们传统写UI的方式作对比了。
①传统写UI的方式:就是先在建立一个xml文件,在里面写好布局好,再回到Java文件(或者是Kotlin文件)里去把控件实例化出来后,再去调用。
②Compose这个库:或者说它是一个框架,它重新定义了Android UI的写法,不再使用xml文件了,而是直接在Kotlin文件(只支持Kotlin)里,写布局的代码。官方对Compose的评价是“让困难的事情变简单,让不可能的事情变得有可能”。
官方对它评价这么高,那我们就来认识认识这个compose。
Compose相对于传统的UI写法,它有两个优势:
(1)它是声明式UI
大家都会把我们以前传统的UI方法,叫做是“命令式UI”,而把compose叫做是“声明式UI”。那这个“命令式”跟“声明式”该怎么理解呢?好,我们先来实现一个功能,通过这个实现功能的过程,能更好的理解这两个概念:有两个按钮,第一个按钮是每按一次让数字加1,另一个按钮是每按一次让数字加1。
传统UI写法(伪代码):
//xml文件
<LinearLayout><Button/>
<Button/>
<TextView/></LinearLayout>//java(kotlin)文件
findViewById(***)
setOnClickListener(***)
setText(***)
“命令式UI”跟“声明式UI”的区别关键就在于:是否需要去手动刷新数据
传统的UI方法需要我们去调用setText方法去更新数据,而compose不用。
可能有些人会问,不是有Data Binding吗,它就可以实现数据的同步更新,那还要这个compose干嘛,我们再举一个例子:有一个按钮,它可以控制一张图片的显示或者隐藏。
在不手动调用 setVisibility方法前提下,Data Binding是做不到通过用布尔类型的数据来控制界面元素是否存在,而compose它可以:
所以,compose的优势就在于,它是一个完全的声明式UI,我们只管把界面声明出来后,当数据变化时,我们不用手动去更新,它会自己帮我们更新数据,并显示最新的数据,省去了我们去做界面更新的工作。
传统 UI 能做到的事,Compose 都是可以做到的:比如自定义绘制、自定义布局、自定义触摸,还有动画,Compose 都是可以做到的。
(2)去掉了xml
这是compose的第二个优势,它抛弃了 xml 的同时还保持了写法的简单,完全解除了混合写法(xml+Java、kotlin)所带来的局限性,让我们写Ui更快速。
JetPack Compose简单介绍相关推荐
- Jetpack Compose详尽介绍
概览 Compose提供了多个api用来实现各种手势,这些手势包括点击.按压.双击.长按.水平垂直滑动.拖动.双指平移缩放旋转.嵌套欢动效果 各种手势效果介绍 点击手势 代码 Box(modifier ...
- jetpack compose原理解析
目录 jetpack compose原理解析 jetpack compse 声明式ui开发 原理分析 整体框架介绍 compose LayoutNode布局介绍 @Composeable注解实现细节 ...
- Jetpack Compose入门篇-简约而不简单
好文推荐: 作者:QiShare Compose简介 Jetpack Compose:利用声明式编程构建Android原生界面(UI)的 工具包 优势 更少的代码.代码量锐减 强大的工具/组件支持 直 ...
- Android Jetpack Compose——一个简单的微信界面
一个简单的微信界面 简述 效果视频 底部导航栏 导航元素 导航栏 放入插槽 绘制地图 消息列表 效果图 实现 聊天 效果图 实现 气泡背景 联系人界面 效果图 实现 好友详情 效果图 实现 发现 效果 ...
- Jetpack Compose Animations 超简单教程
Node:本文基于Jetpack Compose 1.0.0-beta01 Animation是由state驱动的 Compose的核心思想状态驱动UI刷新,这一思想同样体现在动画上. Compose ...
- Jetpack Compose入门详解(实时更新)
Jetpack Compose入门详解 前排提醒 前言(Compose是什么) 1.实战准备 一.优势与缺点 二.前四课 三.标准布局组件 1.Column 2.Row 3.Box 四.xml和com ...
- Jetpack Compose 从入门到入门(六)
本篇说说Compose中的Canvas. 1. Canvas @Composable fun Canvas(modifier: Modifier,onDraw: DrawScope.() -> ...
- Jetpack Compose for Desktop: 里程碑1发布
在深入详解 Jetpack Compose | 优化 UI 构建 中谷歌介绍了为什么要设计 Jetpack Compose 来完成原生 Android 的开发,如今 Jetpack Compose f ...
- Jetpack Compose中的手势操作
点击事件 监听点击事件非常简单,使用 clickable 和 combinedClickable 修饰符即可满足需求: @OptIn(ExperimentalFoundationApi::class) ...
最新文章
- 2.6 datetime 模块
- QT串口2--控制GSM模块的使用
- JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)
- [Leetcode][第546题][JAVA][移除盒子][递归][动态规划]
- 性能测试需求调研分析方法
- Kuboard云原生管理工具
- Android之eclipse简单NDK入门
- 专题:CentOS社区企业操作系统
- java,类的构造方法
- MySQL 读写分离 部分_一个完整的mysql读写分离环境包括以下几个部分
- java压缩单个文件
- C++中的explicit、implicit关键字
- 禁用计算机声卡设备,电脑声音被禁用了怎么办
- 儿童讲堂 - 量词的解释
- 【obs】转载:OBS直播严重延迟和卡顿怎么办?
- Unity 拖动UI物体(干货)
- php webshell 分析,一款奇葩的PHP Webshell后门分析
- Python番外篇:电脑读心术程序 快给你的同事朋友玩一玩
- 卡巴斯基KAV2013 – 免费一年 (六一活动)
- 前端如何获取电池信息?
热门文章
- req.getRequestDispatch与resp.sendRedirect跳转方式
- 20200728-直接提取压缩包里的文件
- web前端中快速切换图片实现视频播放效果
- 10大H5前端框架,让你开发不愁
- 基于netcore的微服务——Polly(2)
- java删除字符串中指定字符串_java:删除字符串中指定字符串的方法
- c语言 怎么将字符串代入函数,通过函数名字符串调用函数【C语言版】
- java中finally什么时候执行_finally是否执行?finally何时执行?
- opencart设置后台中文
- 【日常修机】打印机故障维护