news 2026/8/17 23:56:11

Android Jetpack Compose - enableEdgeToEdge 函数、MaterialTheme 函数、remember 函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Jetpack Compose - enableEdgeToEdge 函数、MaterialTheme 函数、remember 函数

enableEdgeToEdge 函数

@JvmName("enable")@JvmOverloadsfunComponentActivity.enableEdgeToEdge(statusBarStyle:SystemBarStyle=SystemBarStyle.auto(Color.TRANSPARENT,Color.TRANSPARENT),navigationBarStyle:SystemBarStyle=SystemBarStyle.auto(DefaultLightScrim,DefaultDarkScrim)){valview=window.decorViewvalstatusBarIsDark=statusBarStyle.detectDarkMode(view.resources)valnavigationBarIsDark=navigationBarStyle.detectDarkMode(view.resources)valimpl=Impl?:if(Build.VERSION.SDK_INT>=29){EdgeToEdgeApi29()}elseif(Build.VERSION.SDK_INT>=26){EdgeToEdgeApi26()}elseif(Build.VERSION.SDK_INT>=23){EdgeToEdgeApi23()}elseif(Build.VERSION.SDK_INT>=21){EdgeToEdgeApi21()}else{EdgeToEdgeBase()}.also{Impl=it}impl.setUp(statusBarStyle,navigationBarStyle,window,view,statusBarIsDark,navigationBarIsDark)}
  • 在调用 enableEdgeToEdge 函数后,系统状态栏和导航栏会变为透明或半透明,使应用内容可以在其后方显示

MaterialTheme 函数

@Suppress("DEPRECATION_ERROR")@ComposablefunMaterialTheme(colorScheme:ColorScheme=MaterialTheme.colorScheme,shapes:Shapes=MaterialTheme.shapes,typography:Typography=MaterialTheme.typography,content:@Composable()->Unit){valrippleIndication=androidx.compose.material.ripple.rememberRipple()valselectionColors=rememberTextSelectionColors(colorScheme)CompositionLocalProvider(LocalColorScheme provides colorScheme,LocalIndication provides rippleIndication,androidx.compose.material.ripple.LocalRippleTheme provides MaterialRippleTheme,LocalShapes provides shapes,LocalTextSelectionColors provides selectionColors,LocalTypography provides typography,){ProvideTextStyle(value=typography.bodyLarge,content=content)}}
参数说明
colorScheme: ColorScheme主题颜色配置
shapes: Shapes主题形状配置
typography: Typography主题排版配置
content: @Composable () -> UnitCompose 函数类型参数,可以把它理解为一块 UI 内容
例如,传入某个页面的 UI 内容,这块 UI 内容就会自动继承当前 MaterialTheme 样式
Unit 表示这个函数没有实际的返回值

remember 函数

1、基本介绍
  • remember 是一个 Composable 函数,用于在 Composable 函数重组时记住一个值
2、演示
  1. 无参数的 remember 函数
varcountbyremember{mutableStateOf(0)}Button(onClick={count++}){Text("Count:$count")}
  1. 带 key 的 remember
varnamebyremember{mutableStateOf("tom")}valcontent=remember(name){"Hello,$name!"}Button(onClick={if(name=="tom"){name="jerry"}elseif(name=="jerry"){name="tom"}},content={Text(content)})
varnamebyremember{mutableStateOf("tom")}varagebyremember{mutableStateOf(18)}valcontent=remember(name,age){"Hello,$name! You are$ageyears old."}Button(onClick={name="jerry"age=20},content={Text(content)})
3、数据类型状态
  1. 基础类型状态
varinputTextbyremember{mutableStateOf("")}Column{TextField(value=inputText,onValueChange={inputText=it},label={Text(text="请输入内容")})Text("你输入的内容:$inputText")}
varisCheckedbyremember{mutableStateOf(false)}Column{Switch(checked=isChecked,onCheckedChange={isChecked=it})Text("开关状态:${if(isChecked)"开启"else"关闭"}")}
  1. 自定义数据类状态,支持存储自定义数据类,修改时必须赋值新的对象,否则 Compose 无法感知状态变化,因为对象引用未改变
dataclassUser(valid:Int,valname:String,valage:Int)
varuserbyremember{mutableStateOf(User(id=1,name="张三",age=20))}Column{Text("用户ID:${user.id}")Text("用户姓名:${user.name}")Text("用户年龄:${user.age}")Button(onClick={user=user.copy(age=user.age+1)}){Text("年龄 + 1")}}
  1. 集合类型状态,支持存储集合类型,修改时必须赋值新的集合对象,否则 Compose 无法感知状态变化,因为对象引用未改变
varfruitListbyremember{mutableStateOf(listOf("苹果","香蕉","橙子"))}Column{fruitList.forEach{fruit->Text(text=fruit)}Button(onClick={fruitList=fruitList+"葡萄"}){Text("添加葡萄")}}

补充学习

1、尾随 Lambda
(1)基本介绍
  • 当一个函数的最后一个参数是函数类型时,并使用 Lambda 表达式作为参数传递时,可以将 Lambda 表达式放在括号外
(2)演示
funsay_hello(name:String,other_operation:()->Unit):Unit{println("你好,$name")other_operation()}say_hello("张三",{println("今天的天气不错")println("比较适合去旅游")})say_hello("李四"){println("今天的天气不错")println("比较适合去旅游")}
# 输出结果 你好,张三 今天的天气不错 比较适合去旅游 你好,李四 今天的天气不错 比较适合去旅游
funtest(operation:()->Unit):Unit{println("测试开始")operation()println("测试结束")}test{println("测试操作...")}
# 输出结果 测试开始 测试操作... 测试结束
funcustom_compute(operation:(Int,Int)->Int):Unit{println("计算开始")valresult=operation(10,20)println("计算结果:$result")}custom_compute{a,b->a+b}
# 输出结果 计算开始 计算结果:30
传递函数类型参数
  1. 使用 Lambda 表达式
funcustom_compute(operation:(Int,Int)->Int):Unit{println("计算开始")valresult=operation(10,20)println("计算结果:$result")}custom_compute{a,b->a+b}
# 输出结果 计算开始 计算结果:30
  1. 使用函数引用
funcustom_compute(operation:(Int,Int)->Int):Unit{println("计算开始")valresult=operation(10,20)println("计算结果:$result")}funcustom_compute_operation(a:Int,b:Int):Int{returna*b}custom_compute(::custom_compute_operation)
# 输出结果 计算开始 计算结果:200
  1. 使用匿名函数
funcustom_compute(operation:(Int,Int)->Int):Unit{println("计算开始")valresult=operation(10,20)println("计算结果:$result")}custom_compute(fun(a:Int,b:Int):Int{returna-b})
# 输出结果 计算开始 计算结果:-10
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 3:11:10

grok模式识别:从语音日志提取结构化字段

从语音日志中精准提取结构化字段:基于 Fun-ASR 的工程实践 在企业服务自动化日益深入的今天,一个常见的挑战浮出水面:如何从海量的客户通话录音中快速、准确地提取“营业时间”“客服电话”这类关键信息?传统方式依赖人工听录和手…

作者头像 李华
网站建设 2026/8/5 8:47:03

北京大学课程引入:信息科学技术学院实验课使用

Fun-ASR 语音识别系统在高校实验教学中的技术实践与思考 在人工智能技术深度融入教育场景的今天,如何让学生真正“动手”理解大模型背后的工作机制,而不仅仅是调用 API 或运行黑箱工具,成为高校课程设计的一大挑战。北京大学信息科学技术学院…

作者头像 李华
网站建设 2026/8/10 17:20:32

思必驰产品升级:加快推出类似开源项目应对竞争

思必驰产品升级:加快推出类似开源项目应对竞争 在智能语音技术加速渗透办公、教育、客服等场景的今天,企业对语音识别系统的要求早已不再局限于“能用”,而是追求“好用、安全、可控”。尤其是在大模型浪潮推动下,传统模块化ASR&a…

作者头像 李华
网站建设 2026/8/11 9:11:21

招聘逻辑迭代:AI重构HR工作新范式

招聘逻辑迭代:AI重构HR工作新范式AI得贤招聘官很多HR已经隐隐感觉到一件事:不是人不够努力,是招聘这套流程,正在变得不值得人亲自去做。简历一年比一年多,岗位一年比一年细。你筛得越认真,主观性越强&#…

作者头像 李华
网站建设 2026/8/11 9:34:18

discord社区互动:游戏语音聊天自动记录精彩瞬间

Discord社区互动:游戏语音聊天自动记录精彩瞬间 在一场紧张的MOBA对战中,队友突然大喊:“龙要刷新了!集合!”——但你正全神贯注于线上补刀,等反应过来时团战已结束。这种“关键信息听到了却没记住”的场景…

作者头像 李华
网站建设 2026/8/8 20:02:50

UDS 27服务入门必看:安全访问机制通俗解释

UDS 27服务详解:从“种子-密钥”到安全解锁的实战解析 你有没有遇到过这样的场景? 刷写ECU时,明明发了正确的请求,却始终收到 NRC0x33 —— Security Access Denied 。反复检查代码无果,最后才发现:忘…

作者头像 李华