首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年07月26日 15:21

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

参考

From:https://www.cnblogs.com/stars-one/p/18325630
本文地址: http://shuzixingkong.net/article/462
0评论
提交 加载更多评论
其他文章 空间反演对称性 (Spatial Inversion Symmetry) 和非线性响应 (Non-linear Response)
我们定义一次宇称变换 (parity transformation) 为反转所有坐标: \[\mathcal{P}: \begin{pmatrix} x \\ y \\ z \end{pmatrix} \rightarrow \begin{pmatrix} -x \\ -y \\ -z \end{p
空间反演对称性 (Spatial Inversion Symmetry) 和非线性响应 (Non-linear Response) 空间反演对称性 (Spatial Inversion Symmetry) 和非线性响应 (Non-linear Response) 空间反演对称性 (Spatial Inversion Symmetry) 和非线性响应 (Non-linear Response)
《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。 2.上传文件的API(input控件) Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人员
《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇 《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇 《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇
C#中使用 record 的好处 因为好用所以推荐~
一晃距C# 9发布已经4年了,对于record关键字想必大家都不陌生了,不过呢发现还是有很多同学不屑于使用这个语法糖,确实,本质上 record 就是 class 的封装,能用 record 书写的类,那100%都是可以自己手撸出来的,但是呢有没有考虑 别人可能一分钟写好的代码你可能会需要数分钟才能
前端性能优化实践方向与方法
0x01 代码优化与压缩 (1)HTML 移除不必要的空白字符、注释和冗余标签,以减少文件大小 使用命令 npm install html-minifier -g 安装 HTML Minifier 使用命令 html-minifier -V 确认安装成功 在 Node.js 环境中配置 index.
前端性能优化实践方向与方法
【工具】IDEA怎么查看maven依赖链路?
当我在SpringBoot项目中想加个依赖,但是不确定现有依赖的依赖的依赖.....有没有添加过这个依赖,怎么办呢?如果添加过了但是不知道我需要的这个依赖属于哪个依赖的下面,怎么查呢? IDEA中提供了很方便的视图可以满足我们的需求 第一步点击项目右侧的maven 第二步选中Dependencies
【工具】IDEA怎么查看maven依赖链路? 【工具】IDEA怎么查看maven依赖链路? 【工具】IDEA怎么查看maven依赖链路?
.NET 控件转图片
Windows应用开发有很多场景需要动态获取控件显示的图像,即控件转图片,用于其它界面的显示、传输图片数据流、保存为本地图片等用途。 下面分别介绍下一些实现方式以及主要使用场景 RenderTargetBitmap 控件转图片BitmapImage/BitmapSource,在WPF中可以使用Ren
.NET 控件转图片 .NET 控件转图片
微服务:解决复杂业务的妙方
1 微服务介绍 1)什么是微服务 ​ 微服务(Microservices)是一种软件架构风格,它将一个大型应用程序拆分成许多较小的、松散耦合的、独立运行的服务。这些服务通常围绕特定功能或业务领域组织,可以独立开发、部署、扩展和更新。微服务之间通过轻量级的通信协议(如HTTP/REST、消息队列等)相
微服务:解决复杂业务的妙方 微服务:解决复杂业务的妙方 微服务:解决复杂业务的妙方
矩阵的奇异值分解(SVD)及其应用
该博客针对矩阵的奇异值分解(SVD)展开介绍,主要介绍了奇异值分解的计算及其几何意义,并基于C++编程语言举例说明了SVD分解的一些应用。
矩阵的奇异值分解(SVD)及其应用 矩阵的奇异值分解(SVD)及其应用 矩阵的奇异值分解(SVD)及其应用