Zim*_*Zim 1 android kotlin android-jetpack-compose
有没有办法在 Jetpack Compose 中动态设置图标值?
示例,而不是:
Icon(Icons.Filled.Print, "print")
Run Code Online (Sandbox Code Playgroud)
我想做:
Icon(Icons.Filled.(iconValue), iconValueName)
Run Code Online (Sandbox Code Playgroud)
您可以使用 Java 反射。我依赖的事实是,每个材质图标都放置在一个单独的文件中,并且所有这些图标都在androidx.compose.material.icons.filled包下声明。
@Composable
fun IconByName(name: String) {
val icon: ImageVector? = remember(name) {
try {
val cl = Class.forName("androidx.compose.material.icons.filled.${name}Kt")
val method = cl.declaredMethods.first()
method.invoke(null, Icons.Filled) as ImageVector
} catch (_: Throwable) {
null
}
}
if (icon != null) {
Icon(icon, "$name icon")
}
}
Run Code Online (Sandbox Code Playgroud)
您可以查看此答案,了解如何将 Kotlin 扩展编译为 Java 代码的更多详细信息。
我还会使用几个图标为此逻辑编写一个测试,以防 Compose 在未来版本中更改某些内容 - 包名称或将多个图标一起移动到同一个文件中,尽管这种情况不太可能发生。
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |