我有一个应用程序,用户可以选择一个图标,我想保存该图标。我使用 Compose,对于图标我使用 ImageVector。 我想将ImageVector存储在房间数据库中,所以我需要编写一个转换器。任何人都可以帮我编写转换器,或者如果我错了并且不可能,请给我有关如何保存图标的任何信息。
感谢您的帮助!
@Entity(tableName = "pack_template")
data class PackTemplate(
@PrimaryKey
val id: Int,
val name: String,
val icon: ImageVector,
)
这是可能的,但不确定你为什么要这样做。您可以阅读将图标编码为 Base64 字符串,然后将其保存在房间数据库的字段中。编码会使图标的大小增加 33%,并且会产生开销(编码/解码),但如果您的图标相对较小,这可能没问题。
查看这篇文章:
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
}