小编mac*_*our的帖子

使用 rememberCoroutineScope() 与 LaunchedEffect

语境

在 Jetpack compose 中,我们可以选择使用rememberCoroutineScope()和使用LaunchedEffect可组合物以使用协程/运行挂起功能(显示小吃店等)。

到目前为止,我采用的约定是记住我的 compose 树顶部的单个协程作用域,并通过函数参数将其传递到需要它的地方。这似乎是一个很好的做法,但另一方面,它给我的函数签名增加了额外的噪音。

问题

  1. 是否有任何理由更喜欢使用LaunchedEffectoverrememberCoroutineScope()内部可组合函数?
  2. 是否值得为每个撰写树只创建/记住一次协程范围,还是应该只调用rememberCoroutineScope()实际启动协程的每个函数?

kotlin-coroutines android-jetpack-compose

20
推荐指数
3
解决办法
2009
查看次数

如何在横向模式下预览 Compose 布局

我使用的是 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().

有任何想法吗?

android-jetpack-compose android-jetpack-compose-preview

20
推荐指数
2
解决办法
8215
查看次数

Jetpack Compose 中的倾斜渐变背景

我正在尝试在 Jetpack Compose 中绘制渐变背景,并且我希望渐变具有固定角度,无论我要绘制的对象的形状如何。

然而,使用Modifier.background(brush=...),我能找到的最好的方法是linearGradient计算渐变的固定起点和终点的角度。

例如,有没有一种方法可以在不知道最终大小的情况下指定我想要 45 度角的渐变?

编辑:我想要一个可以适用于任何给定角度的解决方案,而不仅仅是 45 度。

android android-jetpack-compose

17
推荐指数
4
解决办法
1万
查看次数

Jetpack Compose 是否提供 Material AutoComplete TextView 替代品?

在将我的应用程序迁移到 Jetpack compose 的过程中,我遇到了应用程序中 TextField 需要自动完成功能的部分。

但是,从版本 1.0.0-alpha05 开始,我找不到任何使用 Compose API 实现此目的的功能。我发现的最接近的东西是DropdownMenuDropdownMenuItem可组合项,但似乎需要大量手动管道才能从中创建自动完成菜单。

当然,显而易见的事情就是等待 Jetpack Compose 的未来更新。但我想知道,在迁移中遇到此问题的人是否找到了解决方案?

android material-components-android android-jetpack-compose

11
推荐指数
2
解决办法
8587
查看次数

何时更喜欢传递 State<T> 而不是 T 本身

是否存在某种情况下人们应该选择其中一种而不是另一种?

@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 的角度来看,我更感兴趣。对组合编译器有什么影响或者重组如何工作?

android-jetpack-compose

5
推荐指数
1
解决办法
398
查看次数