优化底栏图标与降级玻璃细节

This commit is contained in:
BoatingCloud committed 2026-08-27 23:13:09 +08:00
1 parent 27154a3a4e
commit 56d181bce3
6 files changed
+37 -21

No files matched your search

@@ -173,7 +173,7 @@ private fun ServerCard(server: EmbyServer, tint: Color, onClick: () -> Unit, onC
LumaAsyncImage(model = ImageRequest.Builder(LocalContext.current).data(server.iconUrl).crossfade(true).build(), contentDescription = null, modifier = Modifier.size(46.dp).clip(RoundedCornerShape(14.dp)), contentScale = ContentScale.Crop)
} else {
Box(Modifier.size(46.dp).clip(RoundedCornerShape(14.dp)).background(Brush.linearGradient(listOf(tint, tint.copy(alpha = 0.7f)))), contentAlignment = Alignment.Center) {
LumaIconView(LumaIcon.Play, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
LumaIconView(LumaIcon.Server, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
}
}
Spacer(Modifier.width(12.dp))
@@ -237,7 +237,7 @@ private fun ServerGridCard(server: EmbyServer, tint: Color, onClick: () -> Unit,
Modifier.size(48.dp).clip(RoundedCornerShape(14.dp)).background(Brush.linearGradient(listOf(tint, tint.copy(alpha = 0.7f)))),
contentAlignment = Alignment.Center,
) {
LumaIconView(LumaIcon.Play, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
LumaIconView(LumaIcon.Server, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
}
}
Spacer(Modifier.width(10.dp))
@@ -517,12 +517,17 @@ internal fun IconLibraryManagerScreenContent(
) {
Box(Modifier.width(86.dp)) {
Box(
Modifier.size(34.dp)
.lumaGlass(radius = 17.dp, level = com.example.myapplication.ui.design.LumaGlassLevel.Floating)
Modifier.size(48.dp)
.clickable(indication = null, interactionSource = remember { MutableInteractionSource() }) { onBack() },
contentAlignment = Alignment.Center,
) {
LumaIconView(LumaIcon.Close, contentDescription = stringResource(Res.string.back), tint = GlassTokens.text, modifier = Modifier.size(19.dp))
Box(
Modifier.size(34.dp)
.lumaGlass(radius = 17.dp, level = com.example.myapplication.ui.design.LumaGlassLevel.Floating),
contentAlignment = Alignment.Center,
) {
LumaIconView(LumaIcon.Close, contentDescription = stringResource(Res.string.back), tint = GlassTokens.text, modifier = Modifier.size(19.dp))
}
}
}
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
@@ -74,7 +74,7 @@ fun LiquidAppBottomBar(
selected = selectedTab == index,
contentDescription = stringResource(tab.labelRes),
tint = if (isGhostLayer) Color.White else if (selectedTab == index) LumaColors.accent else inactive,
modifier = Modifier.size(33.dp),
modifier = Modifier.size(36.dp),
)
Spacer(Modifier.height(3.dp))
Text(
@@ -136,7 +136,7 @@ fun LiquidAppBottomBar(
icon = LumaIcon.Search,
contentDescription = null,
tint = if (searchSelected) LumaColors.accent else inactive,
modifier = Modifier.size(37.dp),
modifier = Modifier.size(41.dp),
)
Text(
text = stringResource(Res.string.search),
@@ -358,7 +358,7 @@ fun GlassSearchField(
if (value.isNotEmpty()) {
Box(
Modifier
.size(40.dp)
.size(48.dp)
.clickable(
indication = null,
interactionSource = remember { MutableInteractionSource() },
@@ -221,7 +221,11 @@ fun Modifier.lumaFallbackGlass(
Color(0xFF121B27).copy(alpha = 0.46f)
}
val edge = if (selected) {
LumaColors.glassHighlight.copy(alpha = if (light) 0.34f else 0.26f)
if (light) {
Color(0xFF9BA8B8).copy(alpha = 0.28f)
} else {
Color.White.copy(alpha = 0.22f)
}
} else {
LumaColors.glassHighlight.copy(alpha = if (light) 0.18f else 0.14f)
}
@@ -229,19 +233,19 @@ fun Modifier.lumaFallbackGlass(
if (light) {
Brush.horizontalGradient(
listOf(
LumaColors.accent.copy(alpha = 0.10f),
Color.White.copy(alpha = 0.40f),
Color.White.copy(alpha = 0.30f),
LumaColors.accent.copy(alpha = 0.08f),
Color.White.copy(alpha = 0.44f),
Color.White.copy(alpha = 0.66f),
Color(0xFFDCE3EB).copy(alpha = 0.48f),
Color.White.copy(alpha = 0.38f),
),
)
} else {
Brush.horizontalGradient(
listOf(
LumaColors.accent.copy(alpha = 0.28f),
Color.White.copy(alpha = 0.16f),
Color.White.copy(alpha = 0.08f),
LumaColors.accent.copy(alpha = 0.18f),
Color(0xFF46515F).copy(alpha = 0.30f),
Color.White.copy(alpha = 0.20f),
Color(0xFF202A36).copy(alpha = 0.28f),
),
)
}
@@ -256,23 +260,23 @@ fun Modifier.lumaFallbackGlass(
Modifier.drawWithCache {
val leftGlow = Brush.radialGradient(
colors = listOf(
LumaColors.accent.copy(alpha = if (light) 0.14f else 0.18f),
LumaColors.accent.copy(alpha = 0.04f),
Color.White.copy(alpha = if (light) 0.26f else 0.18f),
Color.White.copy(alpha = if (light) 0.08f else 0.05f),
Color.Transparent,
),
center = Offset(size.width * 0.14f, size.height * 0.18f),
center = Offset(size.width * 0.28f, size.height * 0.18f),
radius = size.height * 1.25f,
)
val rightGlow = Brush.radialGradient(
colors = listOf(
Color.White.copy(alpha = if (light) 0.28f else 0.16f),
Color.White.copy(alpha = if (light) 0.34f else 0.18f),
Color.Transparent,
),
center = Offset(size.width * 0.86f, size.height * 0.22f),
radius = size.height * 0.92f,
)
onDrawWithContent {
drawCircle(leftGlow, center = Offset(size.width * 0.14f, size.height * 0.18f), radius = size.height * 1.25f)
drawCircle(leftGlow, center = Offset(size.width * 0.28f, size.height * 0.18f), radius = size.height * 1.25f)
drawCircle(rightGlow, center = Offset(size.width * 0.86f, size.height * 0.22f), radius = size.height * 0.92f)
drawContent()
}
+6
View File
@@ -130,3 +130,9 @@
文件变更: app/build.gradle.kts、screens/HomeScreen.kt、screens/RecordsScreen.kt、screens/SearchScreen.kt、screens/VideoPlayerScreen.kt、ui/design/LumaComponents.kt、memory/*。
教训: 启动截图需等待启动流程完成后再判断加载态;当前 API35 模拟器仍只验证安全降级玻璃,不能代替真机 Backdrop 逐帧比对。
标签: #lumaplayer #loading #skeleton #player #accessibility #build
[PROJECT:lumaplayer] 底栏图标与资源库细节复核
结论: 底栏普通图标调整为 36dp、搜索图标 41dp,资源库空图标改为服务器图标;搜索清除和图标库返回保留原视觉并补足 48dp 触控范围;API35 模拟器启动、设置页和语言悬浮菜单无异常。
文件变更: screens/LibraryScreen.kt、ui/AppBottomBar.kt、ui/LiquidGlass.kt、ui/design/LumaDesignSystem.kt。
教训: 降级玻璃必须保持独立胶囊几何,不能让菜单或选中态参与页面列表测量;本地参考素材继续排除提交。
标签: #lumaplayer #bottom-bar #accessibility #fallback-glass #emulator #build
+1
View File
@@ -35,3 +35,4 @@
- 2026-08-27:底栏普通图标调整为 33dp、搜索图标 37dp;降级玻璃增加最终 Capsule 裁剪并减弱蓝色选中填充,原生路径空闲态保留轻微 Lens;详情/播放器/剧集加载和播放地址失败时回落到错误态;最终 APK 在 API 35 模拟器启动、Vision/Settings/语言菜单点击复核成功。
- 2026-08-27:收敛公共分段控件、弹出菜单、按钮、输入框及语言菜单的降级玻璃路径,移除纯色方框;补充深色主题系统栏图标同步和操作标题 48dp 点击区域。`assembleDebug`、`lintDebug`、`testDebugUnitTest` 成功,API 35 模拟器验证设置/语言/主题/关于/服务器添加链路无崩溃;本地参考素材仍未跟踪。
- 2026-08-27:播放器进度条替换为自绘拖拽控件并补充无障碍进度调节,Home/Vision/Search 的媒体加载态改为统一骨架占位;移除未使用的 Material 图标依赖。`assembleDebug`、`lintDebug`、`testDebugUnitTest` 成功。
- 2026-08-27:底栏图标调整为 36dp、搜索图标 41dp,资源库无图标服务器使用正确的服务器图标;搜索清除与图标库返回补足 48dp 触控范围。完整 Debug/Lint/Unit 构建和 API35 模拟器回归通过。