首页 > 其他分享 >Jetpack Compose学习(12)——Material Theme的主题色切换

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

时间:2024-07-26 16:17:56浏览次数:15  
标签:Compose Material MaterialTheme Jetpack 主题 Composable 12

原文: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))
}

参考

标签:Compose,Material,MaterialTheme,Jetpack,主题,Composable,12
From: https://www.cnblogs.com/stars-one/p/18325630

相关文章

  • P1082 [NOIP2012 提高组] 同余方程
    [NOIP2012提高组]同余方程解法在这个问题中,我们想要找到......
  • 【YashanDB知识库】服务端是GBK编码,导致从22.2.12.100升级到22.2.13.100失败问题
    问题现象问题单:22.2.12.100升级到22.2.13.100失败现象:如下图,从22.2.12.100升级到22.2.13.100失败,报错。问题风险及影响版本升级失败,影响上线问题发生版本客户版本:22.2.12.100现在版本已经修改掉这个问题,升级比较时忽略掉"----"开头的分隔符和结果前后的空格。问题发生原......
  • wsl docker 安装frp内网穿透出现error: dial tcp 127.0.0.1:xxxx: connect: connectio
    ​环境为win11+wsl2+dockerdesktop+frp镜像发生背景:wsl配置文件中我设置了networkingMode=mirrored所以一般情况下wsl2和主机ip一致,可互通原始配置文件为#frpc.toml配置文件端口映射部分[text]type=tcp#模式local_ip=127.0.0.1#本机iplocal_port=1234#本机端口rem......
  • 腾讯云 Debian12 安装MySQL8亲测可用
    今天刚好需要部署一台服务器,网上查了资料,折腾很久,还是很多问题,现在把我的安装过程以及遇到问题的解决方案记录下来,供大家借鉴!1、更新系统sudoaptupdate2、下载软件包wgethttps://repo.mysql.com/apt/debian/pool/mysql-apt-config/m/mysql-apt-config/mysql-apt-con......
  • 郑州轻工业大学ZZULIOJ1111~1123合集
    郑州轻工业大学zzulioj1111~1123合集本人小趴菜一颗,写博客是为了监督自己的学习以及分享学习资源给需要的人,欢迎大家评论区指出问题。同时由于本人比较懒,注释就不再写了,当然一些自己经常犯迷糊的地方还是会标注的,大家有什么问题也可以指出来,大家一起学习进步。郑州轻......
  • (12)RCC与时钟树编程—基于铁头山羊的STM32标准库教程
    时钟树倍频与分频: LSI:位于芯片内的低速时钟(低速内部时钟):36.768KHz HSI:位于芯片内的高速时钟(高速内部时钟):8MHzLSE:位于芯片外的低速时钟(低速外部时钟):36.768KHzHSE:位于芯片外的高速时钟(低速外部时钟):4~16MHz配置RCC时钟的标准库函数:RCC_HSEConfig(值1);//HSE开......
  • gitlab12-postgresql-主备
    gitlab-postgresql-12.3一、简介1、gitlab仅支持postgresql数据库管理系统,因此,数据库服务器有两个选项可用于linux软件包安装:使用Linux软件包安装附带的打包PostgreSQL服务器(不需要配置,推荐)使用外部postgresql服务器,(需要配置,并且需要手动为数据库设定种子)2、本章节......
  • 导入 torchtext 时出现“OSError: [WinError 127] 找不到指定的过程”
    在训练模型之前,我对一些数据准备有一个相当基本的设置,并且在导入时torchtext它会抛出此错误:Traceback(mostrecentcalllast):File"D:\PythonProjects\FakeNews\train.py",line4,in<module>fromtorchtext.data.utilsimportget_tokenizerFile"D:......
  • LeetCode122. 买卖股票的最佳时机 II
    题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/题目叙述:给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后......
  • C# 12 新增功能实操!
    思维导航前言主构造函数集合表达式内联数组默认lambda参数任何类型的别名参考文章DotNetGuide技术社区交流群前言今天咱们一起来探索并实践C#12引入的全新功能!C#/.NET该如何自学入门?注意:使用这些功能需要使用最新的VisualStudio2022版本或安装.NET......