Jetpack Compose 添加自定义深色/浅色?

2023-12-09

Wh can create dark and light color palette, it's ok. enter image description here

但它只有12种颜色。 如何为浅色和深色调色板添加更多自定义颜色?


您可以使用CompositionLocalProvider为了那个原因。

  1. 创建一个数据类,其中包含您要使用的内容及其staticCompositionLocalOf。例如CustomColorsPalette.kt:
@Immutable
data class CustomColorsPalette(
    val custom1OnBackground: Color = Color.Unspecified,
    val custom2OnBackground: Color = Color.Unspecified,
    val custom1OnSurface: Color = Color.Unspecified,
    val custom2OnSurface: Color = Color.Unspecified,
    val other1: Color = Color.Unspecified,
    val other2: Color = Color.Unspecified
)

val LocalCustomColorsPalette = staticCompositionLocalOf { CustomColorsPalette() }
  1. 根据浅色或深色主题创建不同的变体:
val OnLightCustomColorsPalette = CustomColorsPalette(
    custom1OnBackground = Color(color = 0xFF1A237E),
    custom2OnBackground = Color(color = 0xFF1B5E20),
    custom1OnSurface = Color(color = 0xFFE53935),
    custom2OnSurface = Color(color = 0xFFD81B60),
    other1 = Color(color = 0xFF006064),
    other2 = Color(color = 0xFF643700)
)

val OnDarkCustomColorsPalette = CustomColorsPalette(
    custom1OnBackground = Color(color = 0xFF1E88E5),
    custom2OnBackground = Color(color = 0xFF43A047),
    custom1OnSurface = Color(color = 0xFFC62828),
    custom2OnSurface = Color(color = 0xFFAD1457),
    other1 = Color(color = 0xFF00897B),
    other2 = Color(color = 0xFF896200)
)
  1. 使用中的逻辑Compose主题来决定何时使用其中之一:
@Composable
fun AppTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {
    val colors = if (darkTheme) DarkColorPalette else LightColorPalette
    
    val customColorsPalette =
        if (darkTheme) OnDarkCustomColorsPalette
        else OnLightCustomColorsPalette

    CompositionLocalProvider(
        LocalCustomColorsPalette provides customColorsPalette
    ) {
        MaterialTheme(
            colors = colors,
            typography = Typography,
            shapes = Shapes,
            content = content
        )
    }
}

现在可以直接从可组合代码中使用这些颜色LocalCustomColorsPalette.current:

Text(
    text = "Anything...",
    color = LocalCustomColorsPalette.current.custom1OnBackground
)

有关更多信息CompositionLocalProvider on docs.


Bonus

可以将调用更改为LocalCustomColorsPalette.current使其与我们拥有的其他属性相似MaterialTheme。为此,您可以添加以下代码(它可以与第一步位于同一文件中):

// ...

val MaterialTheme.customColorsPalette: CustomColorsPalette
    @Composable
    @ReadOnlyComposable
    get() = LocalCustomColorsPalette.current

现在你可以这样使用:

Text(
    text = "Anything...",
    color = MaterialTheme.customColorsPalette.custom1OnBackground
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack Compose 添加自定义深色/浅色? 的相关文章

  • 在 Android 上通话结束时启动活动

    我想在通话结束时启动一项活动 找不到任何对此的参考 我该怎么做 我还没有尝试过这个 但我假设你可以运行一些服务 始终在后台运行 它利用电话状态监听器 http developer android com reference android
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • 如何自定义菜单项的背景颜色?

    我正在尝试定制Toolbar的弹出菜单 现在我无法设置菜单项的背景颜色 我的 styles xml 如下所示
  • 我在布局上看不到任何 FirebaseRecyclerAdapter 项目

    我试图将数据从 Firebase 数据库检索到我的布局 但我看不到任何项目FirebaseRecyclerAdapter在布局中 请帮忙 我按照一个教程展示了如何做到这一点 当我运行应用程序时 我没有看到任何项目 但我可以滚动 public
  • Android短音的正确播放方法?

    我正在创建一个应用程序 屏幕上将有多个图像 这些图像将是按钮 点击时会播放短促的声音 我对此进行了研究 只能找到我当前用来播放声音的方法 这似乎根本没有响应 我希望声音能够快速播放并且能够响应多次快速点击 我不确定这在 Android 中是
  • 从响应中获取标头(Retrofit / OkHttp 客户端)

    我正在使用 Retrofit 与 OkHttp 客户端和 Jackson 进行 Json 序列化 并希望获取响应的标头 我知道我可以扩展 OkClient 并拦截它 但这发生在反序列化过程开始之前 我基本上需要的是获取标头以及反序列化的 J
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • 如何在android中显示保存在sdcard文件夹中的图像[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 当我正在显
  • fetchUuidsWithSdp 的奇怪 UUID 逆转

    我有一个在树莓派上运行的 python 蓝牙服务器 使用 PyBluez 我在服务器中使用的uuid是 8f86d132 4ab8 4c15 b8df 0b70cf10ea56 我正在打电话device fetchUuidsWithSdp
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • Android:后台Activity可以执行代码吗?

    后台的活动是否被视为 正在运行 并且可以执行代码 还是处于挂起状态 他们暂停了 活动生命周期 http developer android com reference android app Activity html ActivityLi
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • 通过系统应用程序以编程方式静默安装 apk(无需 root)

    我有带有 android sharedUserId android uid system UID 1000 的系统级应用程序 设备未root INSTALL PACKAGES 权限包含在清单中 我可以静默安装下载的 apk 吗 我已经发现这
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A

随机推荐

  • 为什么改变一个 ArrayList 中的对象会改变所有其他 ArrayList 中的对象?

    我正在制作一个CPU调度模拟器 用于学校项目 我的方法有问题roundRobin功能 当我做c get i jobTime 2 and c get i jobTime 1 它影响我的其他ArrayLists 所以我无法执行其他功能 在我打电
  • Python 单元测试传递参数

    在 Python 中 如何将参数从命令行传递给单元测试函数 这是到目前为止的代码 我知道这是错误的 class TestingClass unittest TestCase def testEmails self assertEqual e
  • 在Java/Android中读取文件的一段

    我确信这可能是一个简单的问题 但不幸的是这是我第一次使用 Java 和 Android SDK 我使用 Apache HTTP 库 特别是使用 MultipartEntity 在 Android 上上传文件 我正在上传到一个服务 该服务允许
  • 我可以在 Visual Studio 数据库项目存储过程中使用 SQLCMD 命令吗?

    我有很多在多个存储过程中相同的 SQL 例如 大多数过程都声明了相同的变量 并且位于相同的 try catch 块中来处理错误 我想使用 r命令 以便我可以将此代码写入一个文件中 然后将其导入到每个 sp 我可以在构建前和构建后脚本中使用该
  • 单一职责原则 - 一个很难看到的例子?

    我刚刚读到了单一职责原则 Robert C Martin 有一次指出 有时很难看出一个类具有多个职责 谁能提供这样一个类的例子吗 考虑一个具有方法的 HTTP 类 获取 网址网址 SendRequest 字符串请求 这两种方法都与 HTTP
  • PHP 浏览器检测和重定向

    All 我的应用程序支持 IE7 MOZILLA 和其他现代浏览器 有人知道一个非常好的浏览器检测和重定向 PHP 类吗 我遇到过这个 但我不确定是否有人使用过这个 http chrisschuld com projects browser
  • isMemberOfClass 与使用 == 比较类

    之间有什么真正的区别 id value BOOL compare1 value isMemberOfClass SomeClass class BOOL compare2 value class SomeClass class 检查是否va
  • 正确从列表中删除整数

    这是我刚刚遇到的一个很好的陷阱 考虑一个整数列表 List
  • 自定义数据原型 symfony3

    我有一个嵌入的表单集合 具有自定义数据原型属性 这是我自定义数据原型的方法 我的主树枝文件 listingbedroomaddpage html twig div class bedrooms div My prototype html t
  • 当 WooCommerce 中的自定义订单状态发生变化时发送电子邮件通知

    我在 WooCommerce 中创建了一个名为 延期交货 的自定义订单状态 wc backorder Add custom status to order list add action init register custom post
  • 如何调试 angular2 打字稿文件

    似乎使用最新的 angular2 npm 包无法调试打字稿源 现存的在 stackoverflow 上回答 and 媒体上的文章已经过时了 我已经创建了一个 github 问题 请支持 有两个问题 1 TypeScript 源不再被硬编码为
  • 将 2 个 QWORD 从通用寄存器移至 XMM 寄存器作为高/低 [重复]

    这个问题在这里已经有答案了 使用 masm for ml64 我试图将 2 个无符号 qwords 从 r9 和 r10 移动到 xmm0 作为无符号 128b int 到目前为止我想出了这个 mov r9 111 low qword fo
  • 如何找到算法的时间复杂度?

    我已经经历过Google and 堆栈溢出搜索 但我没有找到关于如何计算时间复杂度的清晰直接的解释 我已经知道什么了 说一下代码就像下面这样简单 char h y This will be executed 1 time int abc 0
  • 在Python中使用selenium进行分页导航

    我正在使用 Python 和 Selenium 抓取这个网站 我的代码可以工作 但它目前只抓取第一页 我想迭代所有页面并抓取它们 但它们以一种奇怪的方式处理分页 我将如何浏览页面并逐个抓取它们 分页 HTML div class pagin
  • JoptionPane 多选和可滚动选项

    我是 JoptionPane 的新手 有什么方法可以让我具有多选和可滚动功能 请在下面找到我的代码 String bigList new String 100 for int i 0 i lt bigList length i bigLis
  • 是否可以将着色器变量声明为输入和输出?

    我同时使用顶点着色器和几何着色器 我的顶点着色器只不过将其输入转发到几何着色器 version 330 core layout location 0 in uint xy layout location 1 in uint znt out
  • 在 MATLAB 中确定区域平均值

    我需要一些有关图像中 RGB 捕获的帮助 我正在使用 impixel 从图片中手动获取 RGB 但我想创建一个由 20x20 px 框组成的网格 它会自动告诉我每个框的 RGB 值 所以在一张图片中 假设我有 20 个盒子 它会告诉我 20
  • 在 PHP 中使用 URL 突出显示当前导航选项卡

    使用 php url 突出显示当前导航选项卡 带或不带 php 扩展名 php code function curPageName return substr SERVER SCRIPT NAME strrpos SERVER SCRIPT
  • 在 cloudflare 后面获取访问者 ipv4

    我只是有一个问题 我想获取访问者的 IP 地址 一切都很好 但一位用户只给了我 IPv6 这是我可以给你的代码 而且我刚刚安装了cloudflare apache2 Mod SERVER REMOTE ADDR SERVER HTTP CF
  • Jetpack Compose 添加自定义深色/浅色?

    Wh can create dark and light color palette it s ok 但它只有12种颜色 如何为浅色和深色调色板添加更多自定义颜色 您可以使用CompositionLocalProvider为了那个原因 创建