Skip to content

Commit

Permalink
限制消息最大高度
Browse files Browse the repository at this point in the history
  • Loading branch information
storytellerF committed May 8, 2024
1 parent f91e241 commit aec27f6
Showing 1 changed file with 43 additions and 12 deletions.
55 changes: 43 additions & 12 deletions app/src/main/java/com/storyteller_f/fei/ui/components/Messages.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -27,15 +28,29 @@ class MessagesProvider : PreviewParameterProvider<Message> {

}

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)
Expand All @@ -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
})
}
}
}
Expand All @@ -66,8 +95,10 @@ class MessageContentProvider : PreviewParameterProvider<List<Message>> {

@Preview
@Composable
@OptIn(ExperimentalMaterial3Api::class)
fun MessagePage(@PreviewParameter(MessageContentProvider::class) messageList: List<Message>, sendMessage: (String) -> Unit = {}) {
fun MessagePage(
@PreviewParameter(MessageContentProvider::class) messageList: List<Message>,
sendMessage: (String) -> Unit = {}
) {
var content by remember {
mutableStateOf("")
}
Expand All @@ -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 = ""
Expand Down

0 comments on commit aec27f6

Please sign in to comment.