在 Compose LazyColumn 中启用文本选择 by selection 容器

Enabling Text Selection in Compose LazyColumn by selection container

提问人:imansdn 提问时间:11/7/2023 最后编辑:imansdn 更新时间:11/7/2023 访问量:43

问:

我以前使用 WebView 来显示长文本,并根据某些业务逻辑设置每个单词的样式。但是,我最近将此 HTML 内容转换为句子列表,并利用 LazyColumn 在我的 Compose 应用程序中呈现它。

在之前的实现中,我非常珍视的功能之一是能够选择文本并利用弹出选项进行复制或共享等操作。

我尝试将 LazyColumn 包装在 Jetpack Compose 的 SelectionContainer 中,但它目前阻止我在列表中的不同项目中选择文本。

我很好奇是否有办法在我的新 Compose 结构中保留相同的文本选择行为。任何建议或见解将不胜感激。

到目前为止,我已经尝试了这些:

  LazyColumn(
    modifier = Modifier.fillMaxSize(),
    content = {
        items(sentenceList) { index ->
            SelectionContainer {
                Text(
                    text = sentenceList[index]
                )
            }
        }
    }
)

还有这个:

SelectionContainer {
  LazyColumn(
        modifier = Modifier.fillMaxSize(),
        content = {
            items(sentenceList) { index ->
                    Text(
                        text = sentenceList[index]
                    )
                }
            }
    )
 }

更新1:

我应该提一下,第二个选项确实有效,但是当您尝试上下滚动然后再次尝试长按文本选择时,会出现一个问题;奇怪的是,它停止工作了。

安卓 android-jetpack-compose textselection android-jetpack-compose-lazy-column

评论

0赞 Chirag Thummar 11/7/2023
我已经尝试了第二个选项,如复制、共享、删除等,工作正常
0赞 imansdn 11/7/2023
嘿@ChiragThummar,感谢您的评论。第二个选项有效,但我忘了提到,如果您尝试向下和向上滚动,然后再次长按选择,它将不再奇怪地工作。中方能否证实?
0赞 Chirag Thummar 11/7/2023
如果要保留文本选择,则应在项目块中使用它
0赞 imansdn 11/7/2023
不,我不希望在滚动过程中保留文本选择。测试场景是这样的:尝试选择文本,然后关闭弹出窗口。接下来,向下滚动到列表末尾,然后再次向上滚动。之后,再次尝试选择文本。它不再为我工作。@ChiragThummar

答:

0赞 Chirag Thummar 11/7/2023 #1

我想你可能错过了.我已经尝试了以下代码,它对我有用。StateLazyColumn

试试这个

@Preview(showBackground = true)
@Composable
 fun TestPreview() {
    LazyColumn(
        state = rememberLazyListState(),
        modifier = Modifier.fillMaxSize(),
        content = {
            items(65) { index ->
                SelectionContainer {
                    Text(
                        text = "I have pasted long text for text selection demo."
                    )
                }
            }
        }
    )

}