From 89e35a1933ba40513a96572b27291c0aa65c918c Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Sat, 11 Oct 2025 10:21:42 +0000
Subject: [PATCH] 框架优化
---
libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt | 89 ++++++++++++++++++++++++++++++++++++++++----
1 files changed, 80 insertions(+), 9 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 3dd7708..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
@@ -1,5 +1,6 @@
package com.runt.open.mvi.views
+import android.util.Log
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@@ -13,9 +14,14 @@
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card
import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -23,7 +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
@@ -37,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) {
@@ -66,10 +101,12 @@
fun MessageDialog(message : MessageState){
if(message.isVisible){
Dialog(onDismissRequest = {
- if(message.cancelDissmiss){
+ //系统响应
+ Log.i("PublicViews" , "MessageDialog: onDismiss")
+ if(message.touchOutside){
message.setDismiss.invoke()
+ message.onDismissRequest.invoke()
}
- message.onDismissRequest
}) {
Card(
modifier = Modifier
@@ -80,7 +117,8 @@
) {
Column(modifier = Modifier.wrapContentHeight()){
Text(text = message.title, fontSize = 16.sp,
- modifier = Modifier.fillMaxWidth()
+ modifier = Modifier
+ .fillMaxWidth()
.padding(top = 20.dp , start = 20.dp)
.wrapContentSize(Alignment.Center),
textAlign = TextAlign.Center)
@@ -89,7 +127,7 @@
modifier = Modifier
.fillMaxWidth()
.wrapContentSize()
- .padding(top = 30.dp , bottom = 20.dp, start = 14.dp, end = 15.dp)
+ .padding(top = 30.dp , bottom = 20.dp , start = 14.dp , end = 15.dp)
.wrapContentSize(Alignment.Center),
textAlign = TextAlign.Center,
)
@@ -99,9 +137,15 @@
Button(onClick = {
if(message.cancelDissmiss){
message.setDismiss.invoke()
+ message.onDismissRequest.invoke()
}
- message.onDismissRequest
- }) {
+ message.onCancelRequest.invoke()
+ },
+ colors = ButtonDefaults.buttonColors(
+ containerColor = Color.Gray, // 背景色
+ contentColor = Color.White, // 文字/图标颜色
+ disabledContainerColor = Color.Gray // 禁用时背景色
+ ),) {
Text(text = message.cancelText)
}
}
@@ -109,8 +153,9 @@
Button(onClick = {
if(message.confirmDissmiss){
message.setDismiss.invoke()
+ message.onDismissRequest.invoke()
}
- message.onConfirmRequest
+ message.onConfirmRequest.invoke()
}) {
Text(text = message.confirmText)
}
@@ -128,8 +173,10 @@
alignment = Alignment.TopCenter,
) {
Surface(
- modifier = Modifier.fillMaxWidth()
- .wrapContentHeight().padding(10.dp),
+ modifier = Modifier
+ .fillMaxWidth()
+ .wrapContentHeight()
+ .padding(10.dp),
shadowElevation = 2.dp,
border = BorderStroke(1.dp, Color.Gray) ,
shape = RoundedCornerShape(8.dp)
@@ -146,4 +193,28 @@
}
}
}
+}
+
+@Composable
+fun TitleBarView(title:String,onBackClick:()->Unit){
+ Row(modifier = Modifier
+ .wrapContentSize(Alignment.Center)
+ .height(50.dp), verticalAlignment = Alignment.CenterVertically) {
+ Spacer(modifier = Modifier.size(15.dp))
+ IconButton(onClick = onBackClick, modifier = Modifier.size(30.dp,30.dp)) {
+ Icon(Icons.Default.ArrowBack, contentDescription = null, tint = Color.Black)
+ }
+
+ Text(text = "${title}", modifier = Modifier
+ .weight(1f)
+ .fillMaxWidth()
+ .wrapContentSize(Alignment.Center))
+ Spacer(modifier = Modifier.size(30.dp))
+ Spacer(modifier = Modifier.size(15.dp))
+ }
+}
+@Preview
+@Composable
+fun previewLayout(){
+ MessageDialog(message = MessageState(cancelText = "lll"))
}
\ No newline at end of file
--
Gitblit v1.9.1