Jetpack Compose学习(12)——Material Theme的主题色切换

news/2024/9/20 15:43:50/文章来源:https://www.cnblogs.com/stars-one/p/18325630

原文:Jetpack Compose学习(12)——Material Theme的主题色切换-Stars-One的杂货小窝

闲着无事研究了下Jetpack Compose M3 主题切换效果

本系列以往文章请查看此分类链接Jetpack compose学习

如何生成主题

首先,我们需要知道的是,M3有提供个在线网站供开发者进行快速生成主题,详情可见- Material Theme Builder

不过可能需要点魔法才能访问,页面如下

而右上角,则可以快速导出主题文件(由于我们是Compose,所以选择导出compose即可)

会得到一个名为kt的主题文件,如下图所示

之后我们根据需要设置当前的主题使用即可(通过MaterialTheme的colorScheme参数进行设置)

  • lightColorScheme开头的是亮色主题
  • darkColorScheme则是暗色主题

代码

我们需要更改亮色或暗色主题,只需要更改colorScheme参数即可

object MyThemeStyle{var isDark = mutableStateOf(false)val LightColorPalette = lightColorScheme()val DarkColorPalette = darkColorScheme()
}@Composable
fun App() {var isDark by remember { MyThemeStyle.isDark }//根据当前选择,进行亮色和暗色主题的更改MaterialTheme(colorScheme = if (isDark) DarkColorPalette else LightColorPalette) {Box{Button(onClick = {MyThemeStyle.isDark.value =MyThemeStyle.isDark.value.not()}){Text("更改主题")}}}

当然,上面的代码,如果重启软件之后就会还原为默认,我们可以将配置保存起来中,每次启动软件读取即可

  • 桌面端: 通过某个文件来进行配置保存,我自己的做法是使用Properties文件
  • Android: 通过SharePreference等保存配置即可

说明

需要注意的是,我们在MaterialTheme的组件里的其他Composable,布局得使用Surface,即可触发对应的字体颜色设置,图标颜色设置(更换主题的时候也会自动更换主题),用其他布局的@Composable,则无此自动更改颜色的效果

primary和onPrimary 意思是底部背景色为primary,而onPrimary对应的是背景上的文字或图标icon的颜色,其他几个主题色也是类似原理,不再赘述

上面示例代码中,我们只是设置了主题色,其他形状,排版(字号)我们都还是使用默认的

下面则是补充下MaterialTheme其他几个常用的对象简单使用

设置形状

可以使用此对象 MaterialTheme.shapes来进行设置组件背景为圆角矩形,如下面示例代码

@Composable
Surface(Modifier.background(Color.Black,MaterialTheme.shapes.small)){}

设置颜色

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun ClickText(content: String, onclick: () -> Unit) {Text(content, color = MaterialTheme.colorScheme.secondary, modifier = Modifier.onClick {onclick.invoke()}.pointerHoverIcon(PointerIcon.Hand, false))
}

设置字号

字体的字号大小也可以使用MaterialTheme.typography来设置,如下面代码:

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun ClickText(content: String, onclick: () -> Unit) {Text(content, color = MaterialTheme.typography.titleMedium, modifier = Modifier.onClick {onclick.invoke()}.pointerHoverIcon(PointerIcon.Hand, false))
}

参考

  • Material Theme Builder,生成主题色的工具
  • Compose 中的 Material Design 3 | Jetpack Compose | Android Developers

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UG二次开发NXOpen-Python(十四)自定义特征(CustomFeature)

可以通过二次开发建立自定义特征,实现和长方体、圆柱等一样的特征插入和特征编辑操作。如下图所示:   点击确定后,即可在指定点生成一个指定长度的正四面体,并且双击该特征即可进行编辑并更新。 未完待续

Telegram纸飞机统计机器人源码,TG群记账群发机器源码人,TG自动记账全开源版本

Telegram纸飞机统计机器人源码,TG群记账群发机器源码人,TG自动记账全开源版本 一.thinkphp6框架开发 按thinkphp6部署+伪静态+php7.4 数据库连接信息在config文件夹database.php文件修改 后台账号:admin 密码 123321. (有个小数点) 二.机器人部署 1.去tg官方申请机器人获取到t…

项目环境出现PHP 502 Bad Gateway 问题排查

一、现象 昨天运维人员被告知,在升级完客户集群环境后,访问管理页面偶尔会报 502 Bad Gateway二、排查思路 1、看到 502 第一时间想到的应该是 php-fpm 出问题了,先看下 nginx 日志,连接被对端关闭,说明 php-fpm 进程提前退出了,那是什么原因导致 php-fpm 退出了呢? 2、…

mysql8: 新建账号和权限操作

一,允许从任何ip访问时,用% CREATE USER myusername@% IDENTIFIED BY my_password;GRANT ALL PRIVILEGES ON `mybase`.* TO myusername@%;FLUSH PRIVILEGES; 注意:这种做法在生产环境中不要使用,不够安全, 只用于内部开发时工程师共同访问的内部环境 二,授权的例…

windows中MySQL迁移数据存放盘符位置

由于刚开始安装mysq时都选择了默认安装,数据存放在了c盘,后面数据量过大c盘不堪重负,所以迁移数据到D盘windows中MySQL迁移数据存放盘符位置 参考:https://blog.csdn.net/ZYX121799/article/details/136474869查看MySQL的数据存放位置 show global variables like "%d…

前端性能优化实践方向与方法

前端性能优化实践方向与方法0x01 代码优化与压缩 (1)HTML移除不必要的空白字符、注释和冗余标签,以减少文件大小使用命令 npm install html-minifier -g 安装 HTML Minifier使用命令 html-minifier -V 确认安装成功在 Node.js 环境中配置 index.js // 引入 HTML Minifier co…

【YashanDB知识库】开源调度框架Quartz写入Boolean值到YashanDB报错

问题现象 Quartz 是一个广泛应用于企业级应用中的开源作业调度框架,它主要用于在Java环境中管理和执行任务。 为了任务调度,Quartz的数据模型中使用了大量的布尔值记录任务、流程的各种状态,如:Quartz使用JDBC写入任务状态代码: ps = conn.prepareStatement(); setBoolean…

jmeter 测试getpost请求测试遇到的问题

GET请求Get请求的参数要写在Url后面,不能写在请求体POST请求post请求验证除了cookie之外,可能还会有token,需要加到http请求头里面提示说是会话校验失败,猜测是cookie失效或者是少了参数,查看请求post请求Content-Type和实际接口不符合,接口返回415错误服务器返回415,表…

01HTML+CSS

今日正式开始学习前端,学习内容有 1.标签的写法:标签分为单标签和双标签,其中他们都是由尖括号组成<>,例如:加粗标签<strong></strong>,倾斜标签<em></em>,下划线标签<ins></ins>,删除线标签<del></del>。 2.HT…

24数据安全产业人才积分争夺赛

Wireshark2.1 题目内容:存在漏洞的PHP页面名称是?(比如:a.php) 直接搜索php所以flag: theanswerishere.php Wireshark2.2 题目内容:当前表的列数共有几列?(比如:1)找到了 所以flag:3 Wireshark2.3 题目内容:注入目标的列名是?所以flag:th1sfI4g 错的,要加flag{}…

MySQL入门---(一)SQL的DDL语句

1.管理员身份进入命令行窗口:win+r cmd 然后不要直接点,按ctrl+shift+enter管理员模式进去,点确定 2.MySQL数据库启动:net start mysql80 停止:net stop mysql80 3.系统自带的命令行工具执行指令:mysql -u root -p 1.SQL通用语法:2.DDL语句3.表结构查询:4.创建表结构…

《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇

1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。 2.上传文件的API(input控件) Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,…