From d974ad35af0aa4585091303256dbe221fe04a1fb Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Sat, 30 Aug 2025 17:43:48 +0000 Subject: [PATCH] 超出父容器 --- libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt | 33 ++++++++++++++++++++++++++++++--- 1 files changed, 30 insertions(+), 3 deletions(-) diff --git a/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt b/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt index 6cf1b26..0208e22 100644 --- a/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt +++ b/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt @@ -29,8 +29,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.Layout import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog @@ -44,6 +46,32 @@ * @purpose * @date 5/18/25 */ + +/** + * 超出父容器 + */ +@Composable +fun UnboundedBox( + modifier: Modifier = Modifier, + content: @Composable () -> Unit +) { + Layout(content, modifier) { measurables, parent -> + // 给子树宽高用"无限"上限测量 + val loose = Constraints( + minWidth = 0, minHeight = 0, + maxWidth = Int.MAX_VALUE, maxHeight = Int.MAX_VALUE + ) + val placeables = measurables.map { it.measure(loose) } + + // 自己仍按父约束的大小布局(不撑爆父) + val w = parent.maxWidth + val h = parent.maxHeight + layout(w, h) { + // 放在(0,0)。如需往外探出,可用负偏移:placeRelative(-50, 0) + placeables.forEach { it.placeRelative(0, 0) } + } + } +} @Composable fun LoadingDialog( loadingState : LoadingState) { @@ -77,7 +105,6 @@ Log.i("PublicViews" , "MessageDialog: onDismiss") if(message.touchOutside){ message.setDismiss.invoke() - message.onCancelRequest.invoke() message.onDismissRequest.invoke() } }) { @@ -108,11 +135,11 @@ if(!message.cancelText.equals("")){ Spacer(modifier = Modifier.weight(1f)) Button(onClick = { - message.onCancelRequest.invoke() if(message.cancelDissmiss){ message.setDismiss.invoke() message.onDismissRequest.invoke() } + message.onCancelRequest.invoke() }, colors = ButtonDefaults.buttonColors( containerColor = Color.Gray, // 背景色 @@ -124,11 +151,11 @@ } Spacer(modifier = Modifier.weight(1f)) Button(onClick = { - message.onConfirmRequest.invoke() if(message.confirmDissmiss){ message.setDismiss.invoke() message.onDismissRequest.invoke() } + message.onConfirmRequest.invoke() }) { Text(text = message.confirmText) } -- Gitblit v1.9.1