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

如何实现从Jetpack Compose应用程序到外部的拖动?

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

    我可以在我的Compose应用程序中写这样的东西:

    var isDroppable by remember { mutableStateOf(false) }
    val (textFieldValue, setTextFieldValue) = remember { mutableStateOf(TextFieldValue()) }
    
    TextField(
        value = textFieldValue,
        onValueChange = setTextFieldValue,
        modifier = Modifier
            .offset(500.dp, 100.dp)
            .requiredSize(200.dp, 200.dp)
            .border(4.dp, if (isDroppable) Color.Green else Color.Red)
            .onExternalDrag(
                onDragStart = { externalDragValue ->
                    isDroppable = externalDragValue.dragData is androidx.compose.ui.DragData.Text
                },
                onDragExit = {
                    isDroppable = false
                },
                onDrop = { externalDragValue ->
                    isDroppable = false
                    val dragData = externalDragValue.dragData
                    if (dragData is androidx.compose.ui.DragData.Text) {
                        setTextFieldValue(textFieldValue.copy(
                            text = textFieldValue.text.substring(0, textFieldValue.selection.start) +
                                dragData.readText() +
                                textFieldValue.text.substring(textFieldValue.selection.end),
                            selection = TextRange(textFieldValue.selection.end)
                        ))
                    }
                },
            )
    )
    

    然后我可以打开记事本,键入一些文本,然后将这些文本拖动到Compose应用程序中。

    我的问题是:如何得到相反的结果?

    如果我在Compose应用程序中选择了一些文本,我应该能够将其拖回记事本,根据是否按住Ctrl移动或复制它,这与本机应用程序中的文本组件相同。

    0 回复  |  直到 1 年前