avatar
文章
86
标签
12
分类
25
Home
Posts
Learn
Note
Categories
Tags
LogoBravestSnail's Blog
Home
Posts
Learn
Note
Categories
Tags

BravestSnail's Blog

Compose 编译器
发表于2025-10-27|noteAndroidcomposeCompose深入探索
Jetpack Compose由一系列的库组成,但我们需要重点关注三个特定的库:Compose compiler、Compose runtime 和 Compose UI。 其中 Compose编译器 和 Compose runtime 是Jetpack Compose的支柱。从技术上讲,Compose UI 不是Compose体系结构的一部分,因为运行时和编译器被设计为通用的,并由符合其需求的任何客户端库使用。Compose UI 只是其中一个可用的客户端。还有其他的客户端库正在开发中,比如JetBrains为桌面和Web开发的客户端库。也就是说,浏览Compose UI将帮助我们理解Compose如何提供可组合树的运行时内存表示,以及它最终如何从其中物化真正的元素。 到目前为止,我们已经了解到Compose编译器和Compose...
Compose中的软键盘与焦点控制
发表于2025-10-27|noteAndroidcompose
FocusRequester 与 FocusManager在 Compose 中,可以通过 FocusRequester 与 FocusManager 这两个对象可以主动在代码中控制焦点获取和取消焦点,其中FocusRequester可以用来获取焦点,通过调用它的requestFocus()方法来实现,而 FocusManager可以用来取消焦点(以及移动焦点),通过调用它的clearFocus() 方法来实现。(不知道 Compose 官方的设计初衷是什么,这里为什么要搞两个对象。。) 123456789101112131415161718192021222324252627282930313233@Composablefun FocusControlExample() { var text by remember { mutableStateOf("") } var hasFocus by remember { mutableStateOf(false) } val...
Composable函数
发表于2025-10-27|noteAndroidcomposeCompose深入探索
Composable 函数的含义如果我们只专注于简单的语法,任何标准的Kotlin函数都可以成为一个可组合函数,只需将其注解为@Composable: 通过这样做,我们实际上是在告诉编译器,该函数打算将一些数据转换为一个Node节点,以便注册到可组合树中。也就是说,如果我们将可组合函数看成是 @Composable (Input) -> Unit,输入是数据,但输出却不是大多数人认为的函数返回的值,而是一个将元素插入树中的注册动作。我们可以认为这是一种函数执行带来的副作用。 这里所谓的 “注册动作” 在 Compose 中通常称为 “emitting”(发射)。emit 动作是在可组合函数被执行时进行的,这发生在组合过程中。 执行Composable函数的唯一目的是构建或更新树的内存表示状态。这将使它始终与其所代表的树结构保持同步更新状态,因为可组合函数会在其读取的数据每次发生变化时重新执行。为了保持和树的同步更新状态,它们可以发出插入新节点的操作(如上所述),但同样也可以删除、替换或移动节点。可组合函数还可以从树中读取或向树中写入状态。 Composable...
Compose UI
发表于2025-10-27|noteAndroidcomposeCompose深入探索
通过 Compose runtime 集成 UICompose UI 是一个 Kotlin 多平台框架。它提供了通过可组合函数发出 UI 的构建块和机制。除此之外,这个库还包括 Android 和 Desktop 源代码,为 Android 和 Desktop 提供集成层。 JetBrains积极维护Desktop代码库,而Google维护Android和通用代码库。Android和Desktop源代码库都依赖于通用源代码库。到目前为止,Web还没有出现在Compose UI中,因为它是使用DOM构建的。 当使用 Compose runtime 集成 UI 时,目标是构建用户可以在屏幕上体验的布局树。这个树是通过执行发出 UI 的 Composable 函数来创建和更新的。用于树的节点类型只有 Compose UI 知道,所以 Compose runtime 可以不知道它。即使 Compose UI 本身已经是一个Kotlin多平台框架,它的节点类型到目前为止只被 Android 和 Desktop 支持。其他库,如 Compose for Web...
Compose runtime 高级用例
发表于2025-10-27|noteAndroidcomposeCompose深入探索
Compose runtime vs Compose UI在深入讨论之前,非常重要的一点是要区分 Compose UI 和 Compose runtime。Compose UI 是 Android 的新 UI 工具包,具有 LayoutNodes 的树形结构,它们稍后在画布上绘制其内容。Compose runtime 提供底层机制和许多状态/组合相关的原语。 随着 Compose 编译器 支持完整的 Kotlin 平台谱系,现在可以在几乎任何地方(只要它运行Kotlin)使用 runtime来管理 UI 或任何其他树形结构。注意“其他树形结构”部分:Compose runtime 中几乎没有直接提到 UI(或Android)。虽然该运行时肯定是为了支持该用例而创建和优化的,但它仍然足够通用,可以构建任何类型的树结构。事实上,它在这方面与 React JS 非常相似,React JS 的主要用途是在 Web上创建 UI,但它在合成器或 3D 渲染器等领域找到了更广泛的用途。大多数自定义渲染器重用 React...
Compose中的副作用
发表于2025-10-27|noteAndroidcompose
什么是副作用从本质上讲,副作用是任何超出函数控制和作用域的东西。副作用会使函数变得不确定,因此它们使开发人员难以推理代码。 想象有一个函数,它被期望对两个数相加: 对于相同的输入值,其结果永远不会变化,也就是说,不会因为运行次数的增加导致输出结果的不同,因为该函数所做的唯一一件事就是将它们相加。因此,我们可以说这个函数是确定的,我们可以很容易地对它进行推理。这样的函数也经常被称为 “纯函数”,因为它只使用它的输入来计算结果。 现在,让我们考虑添加一些附带行为: 我们引入了一个计算缓存来节省计算时间,如果之前已经计算过结果的话,将会直接返回缓存的结果。但是这个缓存逃脱了函数的控制,因此没有任何东西告诉我们从它读取的值是否自上次执行以来没有被修改过。想象一下,这个缓存正在从一个不同的线程并发更新,突然发现两次连续的调用get(a,...
Compose中的state核心思想
发表于2025-10-27|noteAndroidcompose
Compose 中的状态应用的“状态”是指可以随时间变化的任何值。这是一个非常宽泛的定义,从 Room 数据库到类的变量,全部涵盖在内。 所有 Android 应用都会向用户显示状态。下面是 Android 应用中的一些状态示例: 聊天应用中最新收到的消息。 用户的个人资料照片。 在项列表中的滚动位置。 关键提示:状态决定界面在任何特定时间的显示内容。 下面的示例通过构建一个健康App应用来展示如何正确的使用Compose中的状态。 构建的第一项功能是饮水计数器,用于记录您一天饮用了多少杯水。 创建一个名为 WaterCounter 的可组合函数,其中包含一个 Text 可组合项,用于显示饮水杯数。饮水杯数应存储在名为 count 的值中。 创建一个包含 WaterCounter 可组合函数的新文件 WaterCounter.kt,如下所示: 1234567891011121314151617import androidx.compose.foundation.layout.paddingimport...
Compose中的列表
发表于2025-10-27|noteAndroidcompose
Cloumn 和 Row如果是普通的不是特别长的列表,可以直接使用 Column 和 Row 组件,默认 Column 和 Row 组件是不支持滚动的,如果需要支持滚动可以在 Column 和 Row 组件上使用 Modifier.verticalScroll() 和Modifier.horizontalScroll() 修饰符 1234567891011121314151617181920212223@Composablefun ColumnList(list: List<String>) { Box { Column(Modifier.verticalScroll(rememberScrollState())) { list.forEach { Text(it) Divider() } } }}@Composablefun...
Compose中的Canvas
发表于2025-10-27|noteAndroidcompose
Jetpack Compose中的Canvas API 使用起来感觉比传统View中的要简单一些,因为它不需要画笔Paint和画布分开来,大多数直接就是一个函数搞定,当然也有一些限制。 Compose...
Compose中的Notification
发表于2025-10-27|noteAndroidcompose
发送通知相关的主要有两个关键的类 NotificationCompat.Builder 和 NotificationManagerCompat为方便使用,首先定义一个扩展工具类来管理通知 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106const val MAIN_CHANNEL_ID = "MainChannel ID"const val MAIN_CHANNEL = "MainChannel"fun Context.buildNotification( id: Int, title: String, message: String, ...
1234…9
avatar
BravestSnail
文章
86
标签
12
分类
25
Follow Me
公告
This is my Blog
最新文章
IO模型2025-10-27
Java并发2025-10-27
在U Boot环境下查看U盘文件2025-10-27
wsl代理2025-10-27
Android 系统导航栏模式切换与查询2025-10-27
分类
  • learn15
    • 01 plan7
    • 02 踩坑记录2
    • Java优化3
    • 设计模式2
  • note57
    • Android51
      • BLE1
标签
Java学习 Kotlin Java SharedPreferences Activity Android Handler View LiveData Paging3 PlantUML 问题
归档
  • 十月 2025 73
  • 三月 2023 1
  • 二月 2023 1
  • 九月 2022 2
  • 八月 2022 5
  • 四月 2022 1
  • 三月 2022 2
  • 四月 2020 1
网站信息
文章数目 :
86
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2019 - 2025 By BravestSnail
框架 Hexo 7.3.0|主题 Butterfly 5.3.5