将ImageVector保存到Android Room数据库中

问题描述 投票:0回答:2

我有一个应用程序,用户可以选择一个图标,我想保存该图标。我使用 Compose,对于图标我使用 ImageVector。 我想将ImageVector存储在房间数据库中,所以我需要编写一个转换器。任何人都可以帮我编写转换器,或者如果我错了并且不可能,请给我有关如何保存图标的任何信息。

感谢您的帮助!

@Entity(tableName = "pack_template")
data class PackTemplate(
    @PrimaryKey
    val id: Int,
    val name: String,
    val icon: ImageVector,
)
android icons android-room converters
2个回答
0
投票

这是可能的,但不确定你为什么要这样做。您可以阅读将图标编码为 Base64 字符串,然后将其保存在房间数据库的字段中。编码会使图标的大小增加 33%,并且会产生开销(编码/解码),但如果您的图标相对较小,这可能没问题。


0
投票

查看这篇文章:

https://medium.com/@nosilverbullet/ saving-jetpack-compose-icons-in-room-77eddbe1346c

您只需将图标的名称保存在数据库中,然后就可以将其转换回ImageVector。

要获取图标的名称,您可以使用以下代码:

fun getIconName(icon: ImageVector): String {
    return icon.name.split(".")[1]
}

您可以使用此代码将其转换回来

fun iconByName(name: String): ImageVector {
    val cl = Class.forName("androidx.compose.material.icons.filled.${name}Kt")
    val method = cl.declaredMethods.first()
    return method.invoke(null, Icons.Filled) as ImageVector
}
© www.soinside.com 2019 - 2024. All rights reserved.