From fab018f19ec0f757991cfdc25422266677a78219 Mon Sep 17 00:00:00 2001 From: jjangddu Date: Mon, 11 May 2026 11:02:51 +0900 Subject: [PATCH] =?UTF-8?q?UI:=20=EB=8F=84=EB=84=9B=EC=B0=A8=ED=8A=B8=20?= =?UTF-8?q?=EB=B9=84=EC=9C=A8=20=EA=B8=B0=EB=B0=98=20=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=95=84=EC=9B=83=20(=ED=83=9C=EB=B8=94=EB=A6=BF=20=EB=8C=80?= =?UTF-8?q?=EC=9D=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 고정 dp → 화면 너비 비율: - 도넛: 85% (dev: 65%), 선 두께: 도넛×8% - Bladdy: 도넛×55% (dev: 30%) - 볼륨 폰트: 화면×6% - 패딩: 화면×5%, 간격: 화면×8% - 버튼: 화면×15% (50~70dp clamp) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../views/monitoring/PiezoMonitoringView.kt | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt index e6546b2..245524a 100644 --- a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt +++ b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt @@ -730,7 +730,7 @@ fun PiezoMonitoringView(appState: AppState) { .background(urgency.backgroundColor) ) { // Top bar - val hPad = if (isCompact) 12.dp else 24.dp + val hPad = (screenWidth * 0.05f).dp Row( modifier = Modifier .fillMaxWidth() @@ -854,7 +854,7 @@ fun PiezoMonitoringView(appState: AppState) { verticalArrangement = if (appState.isDevMode) Arrangement.spacedBy(if (isCompact) 12.dp else 20.dp) else - Arrangement.spacedBy(if (isCompact) 32.dp else 40.dp) + Arrangement.spacedBy((screenWidth * 0.08f).dp.coerceIn(20.dp, 48.dp)) ) { // Status badge (항상 urgency 메시지) @@ -871,12 +871,16 @@ fun PiezoMonitoringView(appState: AppState) { .padding(horizontal = 20.dp, vertical = 8.dp) ) - // Donut chart with Bladdy - val donutSize = if (appState.isDevMode) { - if (isCompact) 220.dp else 280.dp - } else { - if (isCompact) 300.dp else 360.dp // 일반 모드: 화면 거의 가득 - } + // Donut chart with Bladdy — 화면 비율 기반 + val screenWidthDp = screenWidth.dp + val donutRatio = if (appState.isDevMode) 0.65f else 0.85f + val donutSize = screenWidthDp * donutRatio + val lineWidthRatio = if (appState.isDevMode) 0.07f else 0.08f + val donutLineWidth = donutSize * lineWidthRatio + val bladdyRatio = if (appState.isDevMode) 0.30f else 0.55f + val bladdySize = donutSize * bladdyRatio + val volFontSize = if (appState.isDevMode) 18.sp else (screenWidth * 0.06f).sp + val maxVolumeForDonut = appState.piezoSettings.maxVolume.toDouble() val donutProgress = if (maxVolumeForDonut > 0 && maxVolumeMl > 0) (maxVolumeMl / maxVolumeForDonut).coerceIn(0.0, 1.0) else 0.0 @@ -885,7 +889,7 @@ fun PiezoMonitoringView(appState: AppState) { if (!appState.isDevMode) { Box( modifier = Modifier - .size(donutSize - 50.dp) + .size(donutSize * 0.85f) .clip(CircleShape) .background(Color.White.copy(alpha = 0.5f)) ) @@ -893,11 +897,7 @@ fun PiezoMonitoringView(appState: AppState) { DonutChartView( progress = donutProgress, urgency = urgency, - lineWidth = if (appState.isDevMode) { - if (isCompact) 22.dp else 30.dp - } else { - if (isCompact) 26.dp else 34.dp - }, + lineWidth = donutLineWidth, size = donutSize ) // Bladdy + 볼륨 (정중앙) @@ -906,14 +906,8 @@ fun PiezoMonitoringView(appState: AppState) { verticalArrangement = Arrangement.Center, modifier = Modifier.matchParentSize() ) { - val bladdySize = if (appState.isDevMode) { - if (isCompact) 80.dp else 110.dp - } else { - if (isCompact) 180.dp else 220.dp - } BladdyRiveView(urgency = urgency, size = bladdySize) Spacer(modifier = Modifier.height(4.dp)) - val volFontSize = if (appState.isDevMode) 18.sp else 24.sp Text( if (displayMaxVolumeMl > 0) "${"%.0f".format(displayMaxVolumeMl)} mL" else "${appState.estimatedVolume} mL", fontSize = volFontSize, @@ -940,7 +934,7 @@ fun PiezoMonitoringView(appState: AppState) { } // Control buttons: Void/Catheterize / Auto / Spot - val btnHeight = if (appState.isDevMode) 56.dp else 62.dp + val btnHeight = (screenWidth * 0.15f).dp.coerceIn(50.dp, 70.dp) Row(horizontalArrangement = Arrangement.spacedBy(if (appState.isDevMode) 8.dp else 10.dp)) { // Void / Catheterize — 즉시 카테터 1개 감소 + 기록 Button(