You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中如何为Color实现Saver以结合rememberSaveable使用?

解决Color在rememberSaveable中保留状态的问题

报错原因是Color不属于Bundle默认支持的可存储类型,rememberSaveable需要借助自定义Saver来实现Color与Bundle兼容类型的转换,以下是两种可行的实现方式:

方式一:利用Color的ARGB Long值实现

Color类本身提供了value属性,对应其ARGB格式的Long值,Bundle支持存储Long类型,基于此实现Saver:

// 定义Color的自定义Saver
val ColorSaver = Saver<Color, Long>(
    save = { it.value }, // 将Color转为对应的ARGB Long值
    restore = { Color(it) } // 通过Long值重建Color对象
)

// 使用rememberSaveable时传入该Saver
var color by rememberSaveable(stateSaver = ColorSaver) {
    mutableStateOf(Color.Red)
}

方式二:拆分RGBA浮点值实现

将Color的红、绿、蓝、透明度四个浮点值拆分为数组存储,Bundle支持存储Float数组:

// 定义Color的自定义Saver
val ColorSaver = Saver<Color, FloatArray>(
    save = { floatArrayOf(it.red, it.green, it.blue, it.alpha) },
    restore = { Color(it[0], it[1], it[2], it[3]) }
)

// 使用方式同上
var color by rememberSaveable(stateSaver = ColorSaver) {
    mutableStateOf(Color.Red)
}

两种方式均能解决屏幕旋转后Color状态丢失的问题,第一种更简洁高效,第二种适合理解状态保存的转换逻辑。

内容的提问来源于stack exchange,提问作者Mikhail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:52:42