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

参考

Jetpack Compose学习(12)——Material Theme的主题色切换的更多相关文章

  1. Jetpack Compose学习(5)——从登录页美化开始学习布局组件使用

    原文:Jetpack Compose学习(5)--从登录页美化开始学习布局组件使用 | Stars-One的杂货小窝 本篇主要讲解常用的布局,会与原生Android的布局控件进行对比说明,请确保了解A ...

  2. Jetpack Compose学习(10)——使用Compose物料清单BOM,更好管理依赖版本

    原文地址:Jetpack Compose学习(10)--使用Compose物料清单BOM,更好管理依赖版本 - Stars-One的杂货小窝 本期讲解下关于Android推出的BOM来简化我们添加co ...

  3. Jetpack Compose学习(1)——从登录页开始入门

    原文地址:Jetpack Compose学习(1)--从登录页开始入门 | Stars-One的杂货小窝 Jetpack Compose UI在前几天出了1.0正式版,之前一直还在观望,终于是出了正式 ...

  4. Jetpack Compose学习(3)——图标(Icon) 按钮(Button) 输入框(TextField) 的使用

    原文地址: Jetpack Compose学习(3)--图标(Icon) 按钮(Button) 输入框(TextField) 的使用 | Stars-One的杂货小窝 本篇分别对常用的组件:图标(Ic ...

  5. Jetpack Compose学习(7)——MD样式架构组件Scaffold及导航底部菜单

    Jetpack Compose学习(7)--MD样式架构组件Scaffold及导航底部菜单 | Stars-One的杂货小窝 Compose给我们提供了一个Material Design样式的首页组件 ...

  6. Jetpack Compose学习(2)——文本(Text)的使用

    原文: Jetpack Compose学习(2)--文本(Text)的使用 | Stars-One的杂货小窝 对于开发来说,文字最为基础的组件,我们先从这两个使用开始吧 本篇涉及到Kotlin和DSL ...

  7. Jetpack Compose学习(4)——Image(图片)使用及Coil图片异步加载库使用

    原文地址 Jetpack Compose学习(4)--Image(图片)使用及Coil图片异步加载库使用 | Stars-One的杂货小窝 本篇讲解下关于Image的使用及使用Coil开源库异步加载网 ...

  8. Jetpack Compose学习(6)——关于Modifier的妙用

    原文: Jetpack Compose学习(6)--关于Modifier的妙用 | Stars-One的杂货小窝 之前学习记录中也是陆陆续续地将常用的Modifier的方法穿插进去了,本期就来详细的讲 ...

  9. Jetpack Compose学习(8)——State及remeber

    原文地址: Jetpack Compose学习(8)--State状态及remeber关键字 - Stars-One的杂货小窝 之前我们使用TextField,使用到了两个关键字remember和mu ...

  10. Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)

    原文:Jetpack Compose学习(9)--Compose中的列表控件(LazyRow和LazyColumn) - Stars-One的杂货小窝 经过前面的学习,大致上已掌握了compose的基 ...

随机推荐

  1. 记录一下Android usb相关的知识学习

    在SecondStageMain中会先调用PropertyInit做属性初始化,该方法会调用PropertyLoadBootDefaults加载持久化的属性主要加载位置: /system/build. ...

  2. 和必应对话之mysql分区分表

    mysql单表数据量太大 导致查询缓慢问题如何解决 您好,这是Bing.根据网络搜索结果,mysql单表数据量太大导致查询缓慢的问题有以下几种可能的解决方案: 使用索引.索引是一种数据结构,可以帮助数 ...

  3. 搭建高可用k8s

    搭建k8s高可用 高可用只针对于api-server,需要用到nginx + keepalived,nginx提供4层负载,keepalived提供vip(虚拟IP) 系统采用openEuler 22 ...

  4. 什么是 MyBatis 的接口绑定,有什么好处?

    接口映射就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑定,我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可以有更加灵活的选择和设置.

  5. 猪齿鱼数智化开发管理平台 1.3.0-alpha发布,欢迎立即体验!

    ​​ 2022年3月18日,数智化开发管理平台猪齿鱼 Choerodon发布 V1.3-alpha版本,多项功能新增或优化,多管齐下,全面提升团队工作效能!通过提供体系化方法论和协作.测试.DevOp ...

  6. RestApi请求地址支持多路径访问

    RestApi请求地址支持多路径访问 @RestController@RequestMapping("/test") //单路径@RequestMapping(path = {&q ...

  7. iOS11之后刷新tableview会出现漂移的现象解决办法

    首先要注意这只是在iOS11下会出现的bug,如果iOS10以及以下也有问题的情况不属于此列 问题的动图如下所示,如果要做每隔一段短时间就刷新一个section甚至整个tableview的操作的时候会 ...

  8. ansible(1)---师傅领进门

    背景 在企业里,运维需要配合开发进行产品上架,说白了就是把写好的代码上服务器.那么,就会出现这样的问题:需要运维人员配置好系统,配置好环境,配置好网络,配置好程序,配置好所有所有的依赖环境.     ...

  9. 设备树DTS 学习: 4-uboot 传递 dtb 给 内核

    背景 得到 dtb 文件以后,我们需要想办法下载到 板子中,并给 Linux 内核使用. (高级版本的 uboot也有了 自己使用设备树支持,我们这里不讨论 uboot 使用的设备树) Linux 内 ...

  10. python爬虫-bs4基础

    # 下面的一段HTML代码将作为例子被多次用到.这是 爱丽丝梦游仙境的 的一段内容(以后内容中简称为 爱丽丝 的文档): html_doc = """ <html& ...