小编Nyc*_*cta的帖子

软件键盘与 jetpack 组合视图的内容重叠

假设我有一些关于 jetpack-compose 内容的活动

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ScrollableColumn(
                modifier = Modifier
                    .fillMaxSize()
                    .border(4.dp, Color.Red)
            ) {
                val (text, setText) = remember { mutableStateOf("") }

                TextField(
                    value = text,
                    onValueChange = setText,
                    label = {},
                    modifier = Modifier
                        .fillMaxWidth()
                )

                for (i in 0..100) {
                    Text("Item #$i")
                }
            }
        }
    }

}

Run Code Online (Sandbox Code Playgroud)

如果我要启动此活动并专注于 TextField,则会弹出一个软件键盘。

但是,界面不会对此做出反应。ScrollableColumn 的底部边框 ( .border(4.dp, Color.Red)) 以及第 100 项 ( Text("Item #$i"))将不可见。

换言之,软键盘与内容重叠。

我怎样才能让喷气背包 compose 尊重可见区域的变化(由于软件键盘)?

android android-layout android-jetpack-compose

8
推荐指数
4
解决办法
2790
查看次数

如何在可组合函数回调中调用 Kotlin 协程?

我想在可组合函数的回调中调用一个挂起函数。

suspend fun getLocation(): Location? { /* ... */ }

@Composable
fun F() {

    val (location, setLocation) = remember { mutableStateOf<Location?>(null) }

    val getLocationOnClick: () -> Unit = {
        /* setLocation __MAGIC__ getLocation */
    }

    Button(onClick = getLocationOnClick) {
        Text("detectLocation")
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我使用 Rx,那么我可以只使用subscribe.

我可以做invokeOnCompletion然后getCompleted,但那个 API 是实验性的。

我不能使用launchInCompositioningetLocationOnClick因为launchInCompositionis@ComposablegetLocationOnClickcan not be @Composable

在常规函数内部获得挂起函数结果的最佳方法是@Composable什么?

android kotlin kotlin-coroutines android-jetpack-compose

8
推荐指数
3
解决办法
4232
查看次数