在 Jetpack compose 中,我们可以选择使用rememberCoroutineScope()和使用LaunchedEffect可组合物以使用协程/运行挂起功能(显示小吃店等)。
到目前为止,我采用的约定是记住我的 compose 树顶部的单个协程作用域,并通过函数参数将其传递到需要它的地方。这似乎是一个很好的做法,但另一方面,它给我的函数签名增加了额外的噪音。
LaunchedEffectoverrememberCoroutineScope()内部可组合函数?rememberCoroutineScope()实际启动协程的每个函数?我使用的是 Android Studio Bumblebee 2021.1.1 Canary 3 + Compose 1.0-rc02,似乎没有简单的方法可以强制使用横向模式进行预览,其中包括使用-land/资源文件夹中的资源(特别是维度)。
我知道这种行为在理论上是可能的,因为 using@Preview(device = Devices.AUTOMOTIVE_1024p)将使用正确的资源值。但是,这不是一个可行的预览选项,因为与默认预览设备相比,像素密度较低。(即使调整预览宽度、高度和字体比例,图标的尺寸仍然错误。)
我能够做到这一点,以便我的 UI 代码使用以下包装器检测横向方向
val lanscapeConfig = LocalConfiguration.current.apply {
orientation = Configuration.ORIENTATION_LANDSCAPE
}
CompositionLocalProvider(LocalConfiguration provides lanscapeConfig) {
// actual preview code
}
Run Code Online (Sandbox Code Playgroud)
然而,这并不能解决上述问题,即无法使用dimensionResource().
有任何想法吗?
我正在尝试在 Jetpack Compose 中绘制渐变背景,并且我希望渐变具有固定角度,无论我要绘制的对象的形状如何。
然而,使用Modifier.background(brush=...),我能找到的最好的方法是linearGradient计算渐变的固定起点和终点的角度。
例如,有没有一种方法可以在不知道最终大小的情况下指定我想要 45 度角的渐变?
编辑:我想要一个可以适用于任何给定角度的解决方案,而不仅仅是 45 度。
在将我的应用程序迁移到 Jetpack compose 的过程中,我遇到了应用程序中 TextField 需要自动完成功能的部分。
但是,从版本 1.0.0-alpha05 开始,我找不到任何使用 Compose API 实现此目的的功能。我发现的最接近的东西是DropdownMenu和DropdownMenuItem可组合项,但似乎需要大量手动管道才能从中创建自动完成菜单。
当然,显而易见的事情就是等待 Jetpack Compose 的未来更新。但我想知道,在迁移中遇到此问题的人是否找到了解决方案?
是否存在某种情况下人们应该选择其中一种而不是另一种?
@Composable
fun <T> Foo(data: State<T>) { ... }
Run Code Online (Sandbox Code Playgroud)
相比
@Composable
fun <T> Foo(data: T) { ... }
Run Code Online (Sandbox Code Playgroud)
或者对于可变状态,
@Composable
fun <T> Foo(data: MutableState<T>) { ... }
Run Code Online (Sandbox Code Playgroud)
相比
@Composable
fun <T> Foo(data: T, setData: (T) -> Unit) { ... }
Run Code Online (Sandbox Code Playgroud)
显然,使用 setData lambda 的一个优点是您可以拦截 set 操作,但从 Compose 的角度来看,我更感兴趣。对组合编译器有什么影响或者重组如何工作?