news 2026/4/29 2:30:30

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/4/26 17:24:40

graph关联分析:语音描述实体关系构建知识图谱

语音到知识:基于 Fun-ASR 的实体关系抽取与图谱构建 在企业会议结束后的第二天,项目经理翻遍了几十页的纪要文档,却仍找不到“谁负责哪个模块”这一关键信息。而在另一个场景中,客服主管希望快速统计过去一周内客户集中反馈的产品…

作者头像 李华
网站建设 2026/4/25 17:35:53

day53(1.4)——leetcode面试经典150

222. 完全二叉树的节点个数 我感觉会有更简单的方法,但是我不知道,我这几题二叉树,只有一题是用bfs,所以这题我也用了bfs 222. 完全二叉树的节点个数 题目: 题解: /*** Definition for a binary tree n…

作者头像 李华
网站建设 2026/4/27 8:52:49

Fun-ASR支持31种语言识别?官方文档未公开细节揭秘

Fun-ASR支持31种语言识别?官方文档未公开细节揭秘 在智能语音应用日益普及的今天,企业对本地化、高安全性的语音识别方案需求持续增长。通义实验室与钉钉团队联合推出的 Fun-ASR,正是瞄准这一趋势推出的一款轻量级、本地部署的语音识别系统。…

作者头像 李华
网站建设 2026/4/23 3:39:02

手把手教你启动Fun-ASR:bash start_app.sh详细说明

手把手教你启动Fun-ASR:bash start_app.sh详细说明 在语音交互日益普及的今天,越来越多开发者希望快速部署一套高精度、低延迟的语音识别系统。然而,从模型加载到服务封装,传统 ASR(Automatic Speech Recognition&…

作者头像 李华
网站建设 2026/4/26 14:06:57

painless脚本:语音编写自定义计算逻辑

painless脚本:语音编写自定义计算逻辑 在智能客服、会议记录和医疗听写等场景中,我们常常面临一个尴尬的现实:语音识别系统明明“听得清”,但输出的文字却“看不懂”。比如,“二零二五年”被原样保留,而不…

作者头像 李华
网站建设 2026/4/26 21:08:34

基于Matlab/Simulink的AUTOSAR模型生成实战

从控制算法到车载代码:如何用 Simulink 自动生成符合 AUTOSAR 标准的嵌入式软件?当模型不再只是仿真,而是能直接“跑”在车上你有没有过这样的经历?花了几周时间在 Simulink 里把一个复杂的电机控制逻辑调得完美无缺,S…

作者头像 李华