Jetpack Compose 从入门到入门(一)

2023-05-16

Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发,打造生动而精彩的应用。它可让您更快速、更轻松地构建 Android 界面。

Jetpack Compose 1.0发布也有一段时间,虽然了解的比较早,但并没有系统的去学习过。因为写过Flutter,所以我个人是很喜欢这种声明式编程。所以接下来准备好好学一下,同时记录下来。

标题叫从入门到入门,可不是你搁这搁这呢。。。主要是我也是边学边记录,不清楚最终可以深入到什么程度,就先不要给自己太大压力了。闲话不多说,开始今天的内容。

1. 准备工作

Jetpack Compose 1.0的预览、构建等都需要开发工具的支持,所以至少需要使用Android Studio Arctic Fox

在这里插入图片描述

其次是它只能使用kotlin语言开发,所以需要你掌握kotlin语法。

2.项目配置

这里我们可以用AS新建项目里面的Empty Compose Activity模板去了解相关配置。
在这里插入图片描述
在这个模板项目中,可以看到一些相关配置:

	// 插件
	dependencies {
        classpath "com.android.tools.build:gradle:7.0.0"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10"
    }
    // 依赖
    dependencies {
    	implementation "androidx.compose.ui:ui:1.0.0"
    	implementation "androidx.compose.material:material:1.0.0"
    	implementation "androidx.compose.ui:ui-tooling-preview:1.0.0"
    	debugImplementation "androidx.compose.ui:ui-tooling:1.0.0"
	}
	// 配置
	buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion '1.0.0‘
        kotlinCompilerVersion '1.5.10'
    }

3.项目代码

还是上面的模板代码,我们简单看看代码。

在这里插入图片描述

首先发现没有了layout文件夹,自定义的样式都在ui.theme包下。我们看下这部分代码:
在这里插入图片描述
可以看到就是颜色、文字样式、主题的配置。对于写过Flutter的我来说,甚至有一丝丝熟悉。下来看一下重头的MainActivity代码:
在这里插入图片描述
先忽略具体ui代码,先了解一下图中这两个注解:

  • @Composable 注解。所有与Compose有关的函数都必须添加这个注解,这个注解让Compose编译器把数据转换成UI。
  • @Preview注解。实现UI的预览功能,甚至可以做简单的交互。例如在预览对象中点击元素、模拟用户输入,甚至还可以播放动画。

4.预览

下面介绍一下@Preview注解,源码如下:

@MustBeDocumented
@Retention(AnnotationRetention.SOURCE)
@Target(
    AnnotationTarget.FUNCTION
)
@Repeatable
annotation class Preview(
    val name: String = "",
    val group: String = "",
    @IntRange(from = 1) val apiLevel: Int = -1,
    // TODO(mount): Make this Dp when they are inline classes
    val widthDp: Int = -1,
    // TODO(mount): Make this Dp when they are inline classes
    val heightDp: Int = -1,
    val locale: String = "",
    @FloatRange(from = 0.01) val fontScale: Float = 1f,
    val showSystemUi: Boolean = false,
    val showBackground: Boolean = false,
    val backgroundColor: Long = 0,
    @UiMode val uiMode: Int = 0,
    @Device val device: String = Devices.DEFAULT
)
  • name:设置预览的名称,方便在面板中识别它。
  • group:设置预览分组,便于分组显示。
  • widthDp/heightDp:设置预览宽高。
  • locale:设置语言区域,便于测试多语言。
  • fontScale:文字缩放。
  • showBackground:是否显示背景。
  • backgroundColor:设置背景色。
  • showSystemUi:是否显示系统界面。
  • uiMode:设置ui模式,例如暗黑模式。
  • device:预览中指定设备。

下面是一些属性使用示例:
在这里插入图片描述
在这里插入图片描述

上面的例子中,每个预览函数都需要单独书写,也不能传参,显得很不灵活。那么使用@PreviewParameter注解,可以将示例数据传递给预览函数。

同时需要实现 PreviewParameterProvider类,并以序列形式返回示例数据。

class TextPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf(
        "Elise",
        "Frank",
        "Julia"
    )
}

@Preview(showBackground = true, group = "name")
@Composable
fun UserNamePreview(
    @PreviewParameter(TextPreviewParameterProvider::class) name: String
) {
    MyApplicationTheme {
        Greeting(name)
    }
}

预览效果:
在这里插入图片描述

5.预览交互模式

@Preview的交互模式目前在AS北极狐版本上默认是关闭状态,所以你需要在设置中打开。

在这里插入图片描述
这里我使用了Jetpack Compose basics文中的例子来演示一下交互模式效果。

在这里插入图片描述
可以看到不需要在手机运行,就可以进行列表的滑动、按钮的点击,动画的效果预览。

最后,如果你想将 @Preview 部署到模拟器或真机上面,可以直接点击边线的“运行”图标:

在这里插入图片描述


本篇先简单了解一些Compose 工具,工欲善其事必先利其器。下篇就可以开始布局相关内容,到此,本篇结束。

6.参考

  • 文档 - Compose 工具
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack Compose 从入门到入门(一) 的相关文章

  • Jetpack Compose 从入门到入门(七)

    本篇进入Compose 动画部分 1 动画预览 在本系列第一篇中我们提到过 xff0c 64 Preview可以帮我们实现UI的预览功能 xff0c 简单的交互和播放动画 在Android Studio Bumblebee xff08 大黄
  • Jetpack Compose 从入门到入门(八)

    接着上一篇的动画部分 xff0c 本篇主要是自定义动画与Animatable AnimationSpec 上一篇中 xff0c 出现了多次animationSpec属性 xff0c 它是用来自定义动画规范的 例如 xff1a span cl
  • Jetpack Compose 从入门到入门(十)

    本篇介绍如何将Jetpack Compose 添加到已有应用中 xff0c 毕竟大多数情况都是在现有项目中使用 Jetpack Compose 旨在配合既有的基于 View 的界面构造方式一起使用 如果您要构建新应用 xff0c 最好的选择
  • Docker——(十五)Docker Compose 实战 MySQL

    MySQL5 version 39 3 1 39 services mysql restart always image mysql 5 7 22 container name mysql ports 3306 3306 environme
  • macbook m1上安装docker-compose

    之前我已安装好了docker 在网站https github com docker compose releases 下载docker compose linux aarch64 放到我的 Users a1目录下 进入目录cd Users
  • Docker Compose部署Springboot+Mysql项目

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 在上一篇文章Spring Boot Maven 43 Docker打包中 xff0c 我们实现了将Springboot项目源代码一
  • JETSON TX2镜像备份与恢复以及刷机的巨详细教程(Jetpack 4.4版本)

    摘自 xff1a https blog csdn net Feizhai2 article details 109068697 utm medium 61 distribute pc relevant t0 none task blog B
  • Docker Compose

    1 简介 Docker Compose 项目是 Docker 官方的开源项目 xff0c 负责实现对Docker容器集群的快速编排 Docker Compose将所管理的容器分为三层 xff1a 工程 xff08 project xff09
  • docker-compose 部署ELK

    目录结构 docker compose 文件 span class token key atrule version span span class token punctuation span span class token strin
  • Jetpack Compose 不止是一个UI框架~

    Jetpack Compose是用于构建原生Android UI的现代工具包 Jetpack Compose使用更少的代码 xff0c 强大的工具和直观的Kotlin API xff0c 简化并加速了Android上的UI开发 这是Andr
  • rxjava - compose()操作符

    1 问题背景 想要给多个流重复应用 34 一系列 34 相同的操作符 该怎么办 比如 我们使用Rx 43 Retrofit进行网络请求时 都有遇到这样场景 要在io线程中请求数据 在主线程订阅 更新UI 所以必须频繁使用下面这样的代码 su
  • Jetson查看JetPack版本(tool)

    Jetson查看JetPack版本 查看L4T版本 我的L4T版本为 32 5 1 在官网查找对应的jetpack版本 This page includes access to previously released versions of
  • Jetson tx2 安装jetpack_3.3手动安装cuda9.0,cudnn7.1

    1 刷机前的准备 xff08 写在前面的话 xff09 装有Ubuntu16 04或者Ubuntu18 04的电脑 xff0c 这里说的电脑可以是台式机也可以是笔记本与TX2区分开来 xff08 电脑是16 04或者18 04无所谓 xff
  • Jetpack练手(03):DataBinding

    文章目录 一 导入依赖二 搭建布局三 创建 ViewModel 数据对象四 修改布局为 DataBinding 布局五 绑定数据六 Demo 效果 一 导入依赖 新建 DataBindingDemo 工程 xff0c 参照 LiveData
  • Jetpack练手(04):Lifecycle

    文章目录 一 搭建布局二 非 Lifecycle 实现三 Lifecycle 实现四 Demo 效果 一 搭建布局 新建 LifecycleDemo 工程实现 界面停留时间计时 xff0c 在 activity main xml 搭建简单布
  • docker-compose 中 volumes、environment、privileged、network_mode的使用

    privileged xff1a 用来给容器root权限 xff0c 不安全的environment xff1a 设置容器中的环境变量volumes xff1a 用来存储docker持久化的数据 xff0c 启动tomcat容器后 xff0
  • Jetpack学习之Navigation

    Jetpack提供了一个名为Navigation的组件 用来管理页面 Actvity和Fragment 以Fragment为主 和App bar Navigation的优势 可视化的页面导航图 便于理清页面间的关系 通过destinatio
  • jetpack Compose 学习笔记

    目录 Modifier clickable 取消点击水波纹 LazyColum 相关 Modifier clickable 取消点击水波纹 modifier Modifier clickable onClick indication nul
  • 不贴代码能说明白Jetpack LiveData原理吗(一)

    LifecycleOwner如何提供周期生命周期的变化 LifecycleObserver如何得知生命周期的变化 LiveData的背后隐藏了多少不为人知的秘密 这一切都要从观察者模式说起 起源 何为观察者模式 在代码中最直接的表现就是在事
  • 一文带你了解ViewModel

    Lifecycle库可以有效避免内存泄漏和解决常见的Android生命周期难题 1 引言 ViewModel属于lifecycle 生命周期感知型组件 中的一员 通常与LiveData DataBinding一起使用 它们是MVVM架构的重

随机推荐

  • 百元买百鸡(C++)

    我国古代数学家张丘建在 算经 一书中曾提出过著名的 百钱买百鸡 问题 xff0c 该问题叙述如下 xff1a 鸡翁一 xff0c 值钱五 xff1b 鸡母一 xff0c 值钱三 xff1b 鸡雏三 xff0c 值钱一 xff1b 百钱买百鸡
  • git 放弃更改常用命令

    1 未add commit git checkout filename path 2 已add未commit git reset HEAD filename 3 放弃已经commit的修改 git reflog查看commit日志 git
  • linux解压缩常见命令

    tar详解 c 建立压缩档案 x xff1a 解压 t xff1a 查看内容 r xff1a 向压缩归档文件末尾追加文件 u xff1a 更新原压缩包中的文件 这五个是独立的命令 xff0c 压缩解压都要用到其中一个 xff0c 可以和别的
  • linux 安装 gcc 方法

    今天安装Linux虚拟机发现竟然没有gcc 感觉是崩溃的 xff0c 上网寻找一下安装方法 xff0c 借鉴总结了一下得出下面步骤 使用root权限下载 sudo yum y install gcc gcc c 43 43 autoconf
  • MFC编程基础(—)

    MFC类的基本层次结构如图所示 xff1a CObject类是MFC提供的绝大多数类的基类 该类完成动态空间的分配和回收 xff0c 支持一般的诊断 出错信息处理和文档序列化等 CCmdTarget类主要负责将系统事件 xff08 消息 x
  • 开启windows10系统组策略更新、开启Windows自动更新、关闭自动更新

    win 43 R键打开运行 xff0c 输入regedit 按路径 计算机 HKEY LOCAL MACHINE SOFTWARE Policies Microsoft Windows WindowsUpdate AU 找到NoAutoUp
  • linux 中 /etc/systemd/system和/usr/lib/systemd/system 的区别

    每一个 Unit xff08 服务等 xff09 都有一个配置文件 xff0c 告诉 Systemd 怎么启动这个 Unit Systemd 默认从目录 etc systemd system 读取配置文件 但是 xff0c 里面存放的大部分
  • Vue3使用axios请求数据后使用v-for显示不出数据

    getAccount let that 61 this axios url 39 http localhost 8080 api GetAllUniAccounts 39 method 39 post 39 then res 61 gt t
  • Axios请求中Content-Type的使用总结

    Axios请求头中的Content Type常见的有3种 xff1a 1 Content Type application json 2 Content Type application x www form urlencoded 3 Co
  • mycat全局序列号数据库方式

    1 server xml lt property name 61 34 sequnceHandlerType 34 gt 1 lt property gt 2 schema xml lt table name 61 34 z test 34
  • Warning: Packets out of order. Expected 8 received 0

    环境 xff1a linux 43 mycat 43 hyperf 43 es 原因 xff1a mycat进行了分片 解决 xff1a 修改文件路径 xff1a vendor hyperf database src Connectors
  • Ubuntu下不能切换中文,qt creator无法输入中文,sogo输入法(详细步骤)

    目录 xff1a 1 解决ubuntu 不支持切换中文 xff0c 并安装sogo输入法步骤 xff1b 2 解决Qt Creator不支持中文输入 xff1a 详细步骤 xff1a 一 解决ubuntu 不支持切换中文 xff0c 并安装
  • wordpress插件API入口

    lt php 64 package Moodo Zhong 64 version 1 0 0 Plugin Name Moodo Zhong Plugin URI http wordpress org plugins hello dolly
  • PHP源码目录说明

    1 build 和编译有关的目录 2 ext 扩展库代码 xff0c 例如 MySQL zlib iconv 等我们熟悉的扩展库 其中 ext standard 目录下是常用的标准函数集 3 main 主目录包含主要的 PHP 宏和定义 4
  • 终端程序定义示例

    interrupt 0 外部中断0 interrupt 1 T0中断 interrupt 2 外部中断1 interrupt 3 T1中断 interrupt 4 串口中断 我来告诉你实质 xff1a 单片机的中断处理是这样工作的 xff0
  • lisp学习资料

    中文LISP学习网站 CL HTTP franz com 217条消息 使用hunchentoot搭建Lisp web 服务器 keyboardOTA的博客 CSDN博客
  • GO调用C语言之字符串传递

    C xff1a hello h include lt stdlib h gt include lt stdio h gt include lt string h gt char abc int strnum char str C hello
  • C++-基础语法-cin.getline() 与 cin.get() 的区别,以及getline()函数使用方法

    参考声明 xff1a C 43 43 primer plus https blog csdn net best fiends zxh article details 53064771 https blog csdn net u0114216
  • Kotlin开发中的一些Tips(二)

    接着上一篇 xff0c 最近又整理了一些 1 作用域函数选择 目前有let run with apply 和 also五个作用域函数 官方文档有张表来说明它们之间的区别 xff1a 总结一下有几点区别 xff1a apply和also返回上
  • Jetpack Compose 从入门到入门(一)

    Jetpack Compose 是用于构建原生 Android 界面的新工具包 它使用更少的代码 强大的工具和直观的 Kotlin API xff0c 可以帮助您简化并加快 Android 界面开发 xff0c 打造生动而精彩的应用 它可让