android - Jetpack Compose:自定义 VectorAsset 图标对象,类似于内置的 `Icons.Default`
问题描述
看起来从res
文件夹中的 Android Vector Resources 加载自定义图标的唯一方法是@Composable
使用该方法在函数中执行此操作vectorResource(R.drawable.myVectorName)
。
这很好,但我喜欢获取类的语法VectorAssets
,Icon(asset: VectorAsset)
它看起来像Icon(Icons.Default.Plus)
.
看起来该vectorResource()
方法使用了一个名为的内部loadVectorResource()
方法,并且它用于读取构成矢量资产文件的实际 XML 文件的方法也是内部的。
我将如何像MyAppIcons.Default.SomeIcon
在 Jetpack Compose 中那样创建对象?
编辑
所以,我已经找到了一个解决方案。但是,我自己对内置Icon()
函数进行扩展/重载会很好,但我不确定是否有合适的方法来做到这一点。
解决方案
原来我没有用我的大脑。答案很简单。
要点是,Icon()
是一个可组合的函数,这意味着当然可以在那里使用vectorResource() 。
所以,正确的方法不是秘密......它是制作自己的MyAppIcon()
组件,调用vectorResource()
然后返回一个 normal Icon()
,如下所示:
正确的方式
@Composable
fun MyAppIcon(
resourceId: Int,
modifier: Modifier = Modifier,
tint: Color = AmbientContentColor.current
) {
Icon(
asset = vectorResource(id = resourceId),
modifier = modifier,
tint = tint
)
}
然后,您可以在其他地方创建一个对象,如下所示:
object MyAppIcons {
val SomeIcon = R.drawable.someIcon
val AnotherIcon = R.drawable.anotherIcon
}
当你把两者放在一起时,你可以像这样使用它:
MyAppIcon(MyAppIcons.SomeIcon)
我希望谷歌很快就会添加这个覆盖,允许我们传递资源 ID。
推荐阅读
- database - 哪个数据库存储气象站生成的气象数据?
- hive - 无法使用 Hue 编辑器在 Hive 查询中获得 2 位小数
- python - 为什么 Django 找不到合适的模板
- ruby-on-rails - Ruby/Rails:为什么 render json: {hello: 'world'} 会访问我的数据库?
- c# - 关于 azure bot 中的瀑布步骤
- gsap - How to trigger TimelineMax animation when ScrollToPlugin is scrolling (ScrollMagic)?
- string - 标签在 javafx 1.0 中以 ''..." 结尾
- vue.js - Vuex 动作和对话窗口
- powershell - Powershell,CSV 导入
- bash - FFmpeg batch convert multiple files