代码之家  ›  专栏  ›  技术社区  ›  Hakanai

如何在Jetpack Compose for Desktop上最好地显示弹出菜单?

  •  0
  • Hakanai  · 技术社区  · 2 年前

    所以我有一个弹出菜单的概念。。。

    @Composable
    expect fun PopupMenu(
        menuItems: List<String>,
        onClickCallbacks: List<() -> Unit>,
        showMenu: Boolean,
        onDismiss: () -> Unit,
        toggle: @Composable () -> Unit,
    )
    

    我有一个桌面弹出菜单。。。

    @Composable
    actual fun PopupMenu(
        menuItems: List<String>,
        onClickCallbacks: List<() -> Unit>,
        showMenu: Boolean,
        onDismiss: () -> Unit,
        toggle: @Composable () -> Unit,
    ) {
        DropdownMenu(
            expanded = showMenu,
            onDismissRequest = { onDismiss() },
        ) {
            menuItems.forEachIndexed { index, item ->
                DropdownMenuItem(onClick = {
                    onDismiss()
                    onClickCallbacks[index]
                }) {
                    Text(text = item)
                }
            }
        }
    }
    

    我想弄明白的是,我该如何在这里展示这个呢?

    @Composable
    fun OneCard(content: MutableState<TextFieldValue>, onValueChange: (TextFieldValue) -> Unit ) {
        Card(modifier = Modifier.draggable(DraggableState {  }, Orientation.Vertical)
            .then(Modifier.padding(16.dp))) {
            OutlinedTextField(
                value = content.value,
                onValueChange = onValueChange,
                placeholder = { TextFieldValue(text = "Your thoughts?") },
                modifier = Modifier.selectable(
                    selected = false,
                    onClick = {
                        // TODO: How to show popup menu on right click, or perhaps after a delay,
                        //       somewhere near the selected text?
                    }
                )
            )
        }
    }
    
    0 回复  |  直到 2 年前