告别XML,Android新声明式UI框架《Jetpack Compose入门到精通》最全开发指南

news2025/1/11 8:50:24

什么是Jetpack Compose?

Jetpack Compose是Android的新声明式UI框架。长期以来, Android 开发人员习惯于使用带有状态视图的xml编写UI,这些状态视图通过逐步浏览视图层次结构进行更新。使用Jetpack Compose, UI 是通过使用KotinQ 函数以无状态方式编写的。

可组合函数使用注解进行@Composable注解。可组合函数必须使用此注解进行注解,通知编译器此函数将UI添加到View Hierarchy。虽然Composable函数可以调用其他标准函数,但Composable本身只能从其他Composable调用。

@Composable 注解意味着什么?

如果您已经了解过 Compose,您大概已经在一些代码示例中看到过 @Composable 注解。这里有件很重要的事情需要注意—— Compose 并不是一个注解处理器。Compose 在 Kotlin 编译器的类型检测与代码生成阶段依赖 Kotlin 编译器插件工作,所以无需注解处理器即可使用 Compose。

这一注解更接近于一个语言关键字。作为类比,可以参考 Kotlin 的 suspend 关键字:

// 函数声明
suspend fun MyFun() { … }
 
// lambda 声明
val myLambda = suspend { … }
 
// 函数类型
fun MyFun(myParam: suspend () -> Unit) { … }

Kotlin 的 suspend 关键字适用于处理函数类型: 您可以将函数、lambda 或者函数类型声明为 suspend。Compose 与其工作方式相同: 它可以改变函数类型。

// 函数声明
@Composable fun MyFun() { … }
 
// lambda 声明
val myLambda = @Composable { … }
 
// 函数类型
fun MyFun(myParam: @Composable () -> Unit) { … }

这里的重点是,当您使用 @Composable 注解一个函数类型时,会导致它类型的改变: 未被注解的相同函数类型与注解后的类型互不兼容。同样的,挂起 (suspend) 函数需要调用上下文作为参数,这意味着您只能在其他挂起函数中调用挂起函数:

fun Example(a: () -> Unit, b: suspend () -> Unit) {
   a() // 允许
   b() // 不允许
}
 
 
suspend 
fun Example(a: () -> Unit, b: suspend () -> Unit) {
   a() // 允许
   b() // 允许
}

Composable 的工作方式与其相同。这是因为我们需要一个贯穿所有的上下文调用对象。

fun Example(a: () -> Unit, b: @Composable () -> Unit) {
   a() // 允许
   b() // 不允许
}
 
 
@Composable 
fun Example(a: () -> Unit, b: @Composable () -> Unit) {
   a() // 允许
   b() // 允许
}

如果您还没有选择使用Jetpack Compose,我强烈建议您查看谷歌为Compose提供整理的学习资料,因为它提供了可用于快速开始您的Compose体验的基本细节和示例,扫码直接领取。

第一章 初识Jetpack

  • Jetpack是什么
  • Jetpack和Androidx
  • AndroidX的迁移
    在这里插入图片描述

第二章 Compose的设计原理和设计概念

  • Jetpack Compose环境搭建
  • Jetpack Compose新特性和组件依赖
  • Jetpack Compose编程思想总结

在这里插入图片描述

第三章 Compose入门

  • Jetpack Compose入门的基础案例
  • Jetpack Compose基础实战
    在这里插入图片描述

第四章 Compose布局

  • Compose State
  • Compose 样式(Theme)
  • Compose 布局核心控件
  • 自定义布局
  • Compose中的ConstraintLayout

在这里插入图片描述

第五章 Compose动画

  • Compose SideEffect
  • Compose 动画概述
  • Compose Crossfade
  • Compose animateContentSize
  • Animatable
  • Compose自定义动画

在这里插入图片描述

第六章 Compose 图形

  • Compose Canvas
  • Compose 绘制API的分析
  • Compose自定义绘制
    在这里插入图片描述

第七章 Compose核心控件总结

  • Scaffold
  • LazyColumn
    在这里插入图片描述

第八章 Compose项目实战

  • 使用Compose实现底部按钮和首页banner以及数据列表
  • 导航规整并实现登录个人中心页
  • 分类页面的实现
  • 实现搜索页面
  • 项目页面的实现
    在这里插入图片描述

最后

以上就是一些 Compose的简单了解以及简单使用想要更加深入学习《Android Jetpack Compose开发应用指南第三版》必须需要一套系统的学习资料。

因为 Compose确实是一套比较难学的东西,它是一个完整的、全新的框架:渲染机制、布局机制、触摸算法以及 UI 的具体写法,全都是新的,抛弃了我们写了 N 年的 View 和 ViewGroup 那一套东西。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大一学生HTML期末作业 【html体育排球5页面带注册】学生网页设计作业源码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

RT-Thread Studio创建STM32WB55工程

STM32WB是ST推出的物联网标准无线连接SoC芯片,可支持BLE、ZigBee等标准协议,内置M4F和M0双内核,其中M0主要运行底层协议栈,而M4F则可以用于应用的开发。 RT-Thread是国内目前比较成熟、比较成熟的物联网操作系统了,有…

C++ Reference: Standard C++ Library reference: Containers: map: map: crend

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/crend/ 公有成员函数 <map> std::map::crend const_reverse_iterator crend() const noexcept;返回指向反向结束的const_reverse_iterator 返回一个const_reverse_iterator&#xff0c;指向容器中第…

CentOS 8 桌面版右上角网络图标消失的解决办法

我们在手动修改网络连接的配置文件后&#xff0c;桌面右上角的网络连接图标可能会消失。 正常显示的网络图标&#xff1a; 网络图标消失后的样子&#xff1a; CentOS 的网络连接由网络管理工具 NetworkManager 负责&#xff0c; 这个问题多半与其有关。 可能的原因 1&#xf…

音视频Media内核学习——OpenMax浅析

一、OpenMax简介&#xff08;缩写为&#xff1a;OMX&#xff09; OpenMAX是一个多媒体应用程序的标准。由NVIDIA公司和Khronos™在2006年推出。 它是无授权费的、跨平台的C语言程序接口序列&#xff0c;这些接口对音频、视频、静态图片的常用操作进行封装。 它包括三层&…

[激光原理与应用-57]:激光器 - 光学 - 常见光学镜片介绍

目录 第1章 光学镜片和普通镜片 1.1 光学镜片和普通镜片的区别 1.2 什么是光学镜片 1.3 反射镜 1.4 透镜 1.5 镜片镀膜 第2章 光学镜片的类型 2.1 半透镜 2.2 半透半反反射镜 - 分束镜 2.3 凸透镜 2.4 凹透镜 2.5 准直镜 2.6 偏振镜片 2.7 分色镜与分色反射镜 2…

【SAP ABAP】SAP Webservice RESTful 接口服务发布教程

SAP Webservice & RESTful 接口服务发布教程1、SAP Webservice 类型2、SAP Webservice 服务发布2.1、准备 RFC2.2、通过 RFC 创建服务2.3、查看 WSDL2.4、访问服务2.5、删除服务3、SAP RESTful 服务发布3.1、创建数据服务类3.2、维护服务3.3、访问服务3.4、删除服务4、SAP …

Ajax(五) Ajax加强

1. 模板引擎的实现原理 1.1 正则与字符串操作 exec() 函数用于检索字符串中的正则表达式的匹配。 如果字符串中有匹配的值&#xff0c;则返回该匹配值&#xff0c;否则返回 null。 1.基本语法&#xff1a;正则表达式 2.分组 正则表达式中 ( ) 包起来的内容表示一个分组&#…

【AIOT】QT样式QSS

使用桌面的PyQt或者web的flaskweb方便快捷的部署搭建可视化AI应用演示Demo&#xff0c;这里记录使用PyQt搭建基于Mediapipe和MixMLP网络的识别控制系统QSS样式代码。 Styles sheets are textual specifications that can be set on the whole application using QApplication::…

基于MOdel的自治交通模拟框架,用于故障-错误-故障链分析(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

二叠氮聚乙二醇,N3-PEG-N3,点击化学试剂简介 CAS 82055-94-5, Azide-PEG-Azide双边活性PEG衍生物

名称 二叠氮聚乙二醇 N3-PEG-N3 中文名称 叠氮PEG叠氮 聚乙二醇二叠氮 二叠氮聚乙二醇 英文名称 N3-PEG-N3 Azide-PEG-Azide CAS 82055-94-5 溶剂 溶于水和大部分有机溶剂 存储条件 -20读冷冻保存&#xff0c;惰性气体保护 N3-PEG-N3是一种双边活性PEG衍生物&#xff0c;可…

Ubuntu服务器Docker及常用库件安装

wshanshi&#xff1a;嗯…是从有道云笔记里弄出来的… 一、安装步骤 1.1、 检查并卸载已安装的docker $ sudo apt-get remove docker docker-engine docker.io containerd runc1.2、使用存储库安装 $ sudo apt-get update$ sudo apt-get install \apt-transport-https \ca-c…

[SCTF2019]Flag Shop (RUBY模板注入)

打开界面发现一个通过金钱来获得flag的&#xff0c;然后点击work或增加金钱但都是个位数 首先想了一下如果做一个脚本一直点击work不就好了吗&#xff0c;但是又想了一下服务器响应太快也不行&#xff0c;如果设置sleep那时间太长了 然后换一个思路&#xff0c;burp抓包看了一…

网络技术基础测试(一)

在一般布线中双绞线最长不可超过&#xff1a;100米网络拓扑图中路由器的图形为&#xff1a; Pv4地址由哪俩部分组成&#xff1a;网段地址和主机地址查询DNS域名信息的CMD命令为&#xff1a;NSLOOKUP关于局域网交换机&#xff0c;描述错误的是&#xff1a;用户可以有不同权限某…

Linux 性能分析工具大全

出于对Linux操作系统的兴趣&#xff0c;以及对底层知识的强烈欲望&#xff0c;因此整理了这篇文章。本文也可以作为检验基础知识的指标&#xff0c;另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识&#xff0c;网络知识和操作系统知识&#xff0c;文档中的工具…

12月编程语言排行榜公布!C+首超 Java

前言 日前&#xff0c;全球知名TIOBE编程语言社区发布了12月编程语言排行榜&#xff0c;有哪些新变化&#xff1f; C 首超 Java 和上个月相比&#xff0c;12 月榜单中最大的变化莫过于 C 以 0.12% 微弱的优势&#xff0c;凭借 11.94% 的市场份额首次超过了 11.82% 的 Java。…

重磅!阿里巴巴三入Java 全球管理组织执行委员会 龙蜥拥抱上游开源生态

近日&#xff0c;Java 全球管理组织 Java Community Process&#xff08;以下简称 JCP&#xff09;经过公平公正的投票&#xff0c;披露了入选最高执行委员会的成员名单&#xff0c;阿里巴巴作为唯一中国代表实现第三次连任。作为龙蜥社区理事长单位&#xff0c;阿里巴巴的此次…

“双重主要上市”潮流来袭,中通快递“赶时髦”意欲何为?

“双重主要上市”的风今年悄然在资本市场刮起。 7月26日&#xff0c;阿里巴巴申请将香港新增为主要上市地&#xff0c;7月27日&#xff0c;雷军的金山云递交了港股双重主要上市申请&#xff0c;据不完全统计&#xff0c;已有贝壳、小鹏、理想、知乎、B站等9家中概股公司&#…

20 个基础实用的 JavaScript 技巧

1.确定对象的数据类型 function myType(type) { return Object.prototype.toString.call(type).slice(8, -1); 使用Object.prototype.toString&#xff0c;通过传入不同类型的判断返回不同的判断函数&#xff0c;一行代码&#xff0c;简洁优雅灵活&#xff1b; 2.循环遍历数…

HylicOS --- 内存抽象

HylicOS已经完成了部分硬件抽象层的工作&#xff0c;包括MMU的初始化并对虚拟内存到物理内存做了映射&#xff0c;创建了页表目录。对串口进行了初始化&#xff0c;实现了printk格式化打印函数&#xff0c;方便了日志输出和程序调试。建立了异常向量表。 现在要做的是内存管理…