You*_*oui 8 android kotlin android-jetpack-compose
我正在使用 Jetpack Compose 在 Android 中实现自定义设计系统,并且我想限制特定的使用drawables以保持一致性和设计完整性。具体来说,我想限制drawables仅使用 Microsoft 开发的Fluent 图标drawables,这些图标在 Android Studio 中共享。
在我的组件中,我定义了接受图标为 的属性drawables。但是,我想将这些属性限制为仅接受 Fluent 图标,并且不允许用户传递任何整数或任何其他可绘制对象。
如何在我的定制设计系统中实现此限制?我应该使用注释处理还是实现一个自定义类来检查Fluent 图标?或者有更好的方法来实现这一目标吗?
任何见解或指导将不胜感激。先感谢您!
我怀疑您的问题只有 1 个解决方案,我喜欢的一种方法是使用 LocalComposition。
带间距的示例
data class Spacing(
val small: Dp = 8.dp,
val medium: Dp = 16.dp,
val large: Dp = 32.dp,
)
val LocalSpacing = compositionLocalOf { Spacing() }
val MaterialTheme.spacing: Spacing
@Composable
@ReadOnlyComposable
get() = LocalSpacing.current
@Composable
fun MainApplicationTheme(
content: @Composable () -> Unit
) {
CompositionLocalProvider(
LocalSpacing provides Spacing(),
) {
MaterialTheme(
colors = LightColorPalette,
typography = Typography,
shapes = Shapes,
content = content
)
}
}
Run Code Online (Sandbox Code Playgroud)
然后你用 MainApplicationTheme 包裹MainActivity你的可组合项,并且你可以访问间距。
你也可以为 Fluent 图标做类似的事情drawables
你像这样使用上面的MaterialTheme.spacing.small
Update1 我所指的代码需要对上面的代码片段进行一些更改,如下所示
class Icons
@get:DrawableRes
public val Icons.AddCircle: Int
get() {
return R.drawable.add_circle
}
val LocalIcons = compositionLocalOf { Icons() }
val MaterialTheme.icons: Icons
@Composable
@ReadOnlyComposable
get() = LocalIcons.current
@Composable
fun MainApplicationTheme(
content: @Composable () -> Unit
) {
CompositionLocalProvider(
LocalIcons provides Icons(),
) {
MaterialTheme(
colors = LightColorPalette,
typography = Typography,
shapes = Shapes,
content = content
)
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它MaterialTheme.icons.AddCircle
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |