From aec27f667040a7e6854994f594973cc08527494e Mon Sep 17 00:00:00 2001 From: storytellerF <34095089+storytellerF@users.noreply.github.com> Date: Wed, 8 May 2024 23:07:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E5=88=B6=E6=B6=88=E6=81=AF=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E9=AB=98=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fei/ui/components/Messages.kt | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/storyteller_f/fei/ui/components/Messages.kt b/app/src/main/java/com/storyteller_f/fei/ui/components/Messages.kt index 554a08f..524a56a 100644 --- a/app/src/main/java/com/storyteller_f/fei/ui/components/Messages.kt +++ b/app/src/main/java/com/storyteller_f/fei/ui/components/Messages.kt @@ -14,6 +14,7 @@ import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider @@ -27,15 +28,29 @@ class MessagesProvider : PreviewParameterProvider { } +const val MAX_LINE = 4 + @Preview @Composable fun MessageItem(@PreviewParameter(MessagesProvider::class) item: Message) { var expanded by remember { mutableStateOf(false) } val clipboardManager = LocalClipboardManager.current val context = LocalContext.current - Row(modifier = Modifier.clickable { - expanded = true - }.padding(bottom = 8.dp).fillMaxWidth()) { + var maxLines by remember { + mutableIntStateOf(MAX_LINE) + } + val measurer = rememberTextMeasurer() + val lineCount by remember { + derivedStateOf { + measurer.measure(item.data).lineCount + } + } + Row(modifier = Modifier + .clickable { + expanded = true + } + .padding(bottom = 8.dp) + .fillMaxWidth()) { Box( modifier = Modifier .width(30.dp) @@ -46,14 +61,28 @@ fun MessageItem(@PreviewParameter(MessagesProvider::class) item: Message) { } Column(modifier = Modifier.padding(start = 8.dp)) { Text(text = item.from) - Text(text = item.data) + Text(text = item.data, maxLines = maxLines) + if (lineCount > MAX_LINE) { + Button(onClick = { + maxLines = if (maxLines == MAX_LINE) { + Int.MAX_VALUE + } else { + MAX_LINE + } + }) { + Text(text = if (maxLines == MAX_LINE) "Show All" else "Close") + } + } } DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) { - DropdownMenuItem(text = { Text(text = stringResource(id = android.R.string.copy)) }, onClick = { - clipboardManager.setText(AnnotatedString(item.data)) - Toast.makeText(context, context.getString(R.string.copied), Toast.LENGTH_SHORT).show() - expanded = false - }) + DropdownMenuItem( + text = { Text(text = stringResource(id = android.R.string.copy)) }, + onClick = { + clipboardManager.setText(AnnotatedString(item.data)) + Toast.makeText(context, context.getString(R.string.copied), Toast.LENGTH_SHORT) + .show() + expanded = false + }) } } } @@ -66,8 +95,10 @@ class MessageContentProvider : PreviewParameterProvider> { @Preview @Composable -@OptIn(ExperimentalMaterial3Api::class) -fun MessagePage(@PreviewParameter(MessageContentProvider::class) messageList: List, sendMessage: (String) -> Unit = {}) { +fun MessagePage( + @PreviewParameter(MessageContentProvider::class) messageList: List, + sendMessage: (String) -> Unit = {} +) { var content by remember { mutableStateOf("") } @@ -85,7 +116,7 @@ fun MessagePage(@PreviewParameter(MessageContentProvider::class) messageList: Li Row(modifier = Modifier.padding(8.dp), verticalAlignment = Alignment.CenterVertically) { TextField(value = content, onValueChange = { content = it - }, modifier = Modifier.weight(1f)) + }, modifier = Modifier.weight(1f).heightIn(max = 100.dp)) Button(onClick = { sendMessage(content) content = ""