移除了边框设置(因为MIUIX主题暂不生效,在考虑搞个更通用的)

This commit is contained in:
HapeLee
2026-05-13 01:31:32 +08:00
parent c6cb67ae94
commit 14ac91246d
8 changed files with 9 additions and 206 deletions
@@ -150,11 +150,6 @@ object ThemeImportExport {
// 容器设置
containerOpacity = ThemeConfig.containerOpacity,
enableContainerBorder = ThemeConfig.enableContainerBorder,
containerBorderWidth = ThemeConfig.containerBorderWidth,
containerBorderStyle = ThemeConfig.containerBorderStyle,
containerBorderColor = ThemeConfig.containerBorderColor,
containerBorderDashWidth = ThemeConfig.containerBorderDashWidth,
// 分割线设置
enableItemDivider = ThemeConfig.enableItemDivider,
@@ -238,11 +233,6 @@ object ThemeImportExport {
// 容器设置
ThemeConfig.containerOpacity = data.containerOpacity
ThemeConfig.enableContainerBorder = data.enableContainerBorder
ThemeConfig.containerBorderWidth = data.containerBorderWidth
ThemeConfig.containerBorderStyle = data.containerBorderStyle
ThemeConfig.containerBorderColor = data.containerBorderColor
ThemeConfig.containerBorderDashWidth = data.containerBorderDashWidth
// 分割线设置
ThemeConfig.enableItemDivider = data.enableItemDivider
@@ -379,11 +369,6 @@ data class ThemeExportData(
// 容器设置
val containerOpacity: Int = 100,
val enableContainerBorder: Boolean = false,
val containerBorderWidth: Float = 1f,
val containerBorderStyle: String = "solid",
val containerBorderColor: Int = 0,
val containerBorderDashWidth: Float = 4f,
// 分割线设置
val enableItemDivider: Boolean = false,
@@ -98,16 +98,6 @@ object ThemeConfig {
var labelContainerColor by prefDelegate(PreferKey.labelContainerColor, 0)
var enableContainerBorder by prefDelegate(PreferKey.enableContainerBorder, false)
var containerBorderWidth by prefDelegate(PreferKey.containerBorderWidth, 1f)
var containerBorderStyle by prefDelegate(PreferKey.containerBorderStyle, "solid")
var containerBorderColor by prefDelegate(PreferKey.containerBorderColor, 0)
var containerBorderDashWidth by prefDelegate(PreferKey.containerBorderDashWidth, 4f)
var enableItemDivider by prefDelegate(PreferKey.enableItemDivider, false)
var itemDividerWidth by prefDelegate(PreferKey.itemDividerWidth, 1f)
@@ -136,7 +136,6 @@ fun ThemeConfigScreen(
var showRestartDialog by remember { mutableStateOf(false) }
var showLauncherIconPicker by remember { mutableStateOf(false) }
var showBorderColorPicker by remember { mutableStateOf(false) }
var currentBorderColorKey by remember { mutableStateOf("containerBorderColor") }
var showNavIconSheet by remember { mutableStateOf(false) }
var showFontSheet by remember { mutableStateOf(false) }
var fontItems by remember { mutableStateOf<List<FileDoc>>(emptyList()) }
@@ -609,62 +608,9 @@ fun ThemeConfigScreen(
}
}
// Border settings
// Container settings
item {
SplicedColumnGroup(title = "容器设置") {
SwitchSettingItem(
title = "显示容器边框",
checked = ThemeConfig.enableContainerBorder,
onCheckedChange = { ThemeConfig.enableContainerBorder = it }
)
if (ThemeConfig.enableContainerBorder) {
SliderSettingItem(
title = "边框粗细",
description = "${ThemeConfig.containerBorderWidth}dp",
value = ThemeConfig.containerBorderWidth,
defaultValue = 1f,
valueRange = 0f..5f,
steps = 49,
onValueChange = { ThemeConfig.containerBorderWidth = it }
)
DropdownListSettingItem(
title = "边框样式",
selectedValue = ThemeConfig.containerBorderStyle,
displayEntries = arrayOf("实线", "虚线"),
entryValues = arrayOf("solid", "dashed"),
onValueChange = { ThemeConfig.containerBorderStyle = it }
)
if (ThemeConfig.containerBorderStyle == "dashed") {
SliderSettingItem(
title = "虚线间隔",
description = "${ThemeConfig.containerBorderDashWidth}dp",
value = ThemeConfig.containerBorderDashWidth,
defaultValue = 4f,
valueRange = 1f..10f,
steps = 89,
onValueChange = { ThemeConfig.containerBorderDashWidth = it }
)
}
ClickableSettingItem(
title = "边框颜色",
option = if (ThemeConfig.containerBorderColor != 0) "#${Integer.toHexString(ThemeConfig.containerBorderColor).uppercase()}" else stringResource(R.string.click_to_select),
onClick = {
currentBorderColorKey = "containerBorderColor"
showBorderColorPicker = true
},
trailingContent = {
if (ThemeConfig.containerBorderColor != 0) {
Box(
modifier = Modifier
.size(28.dp)
.clip(CircleShape)
.background(Color(ThemeConfig.containerBorderColor))
.border(1.dp, MaterialTheme.colorScheme.outlineVariant, CircleShape)
)
}
}
)
}
SwitchSettingItem(
title = "显示分割线",
checked = ThemeConfig.enableItemDivider,
@@ -693,7 +639,6 @@ fun ThemeConfigScreen(
title = "分割线颜色",
option = if (ThemeConfig.itemDividerColor != 0) "#${Integer.toHexString(ThemeConfig.itemDividerColor).uppercase()}" else stringResource(R.string.click_to_select),
onClick = {
currentBorderColorKey = "itemDividerColor"
showBorderColorPicker = true
},
trailingContent = {
@@ -790,17 +735,11 @@ fun ThemeConfigScreen(
ColorPickerSheet(
show = showBorderColorPicker,
initialColor = when (currentBorderColorKey) {
"containerBorderColor" -> ThemeConfig.containerBorderColor
"itemDividerColor" -> ThemeConfig.itemDividerColor
else -> 0
},
initialColor = ThemeConfig.itemDividerColor,
onDismissRequest = { showBorderColorPicker = false },
onColorSelected = {
when (currentBorderColorKey) {
"containerBorderColor" -> ThemeConfig.containerBorderColor = it
"itemDividerColor" -> ThemeConfig.itemDividerColor = it
}
ThemeConfig.itemDividerColor = it
showBorderColorPicker = false
}
)
@@ -813,10 +752,7 @@ fun ThemeConfigScreen(
imageVector = Icons.Default.Delete,
contentDescription = "清除",
onClick = {
fontFolderUri = null
context.putPrefString(PreferKey.fontFolder, "")
ThemeConfig.appFontPath = null
fontItems = emptyList()
showFontSheet = false
}
)
@@ -5,7 +5,6 @@ import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionScope
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -29,16 +28,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.PathEffect
import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
@@ -101,41 +94,6 @@ fun BookshelfItem(
LegadoTheme.colorScheme.cardContainer
}
val borderWidth = ThemeConfig.containerBorderWidth.dp
val borderColor = if (ThemeConfig.containerBorderColor != 0) {
Color(ThemeConfig.containerBorderColor)
} else {
LegadoTheme.colorScheme.outline
}
val borderStyle = ThemeConfig.containerBorderStyle
val enableBorder = ThemeConfig.enableDeepPersonalization && ThemeConfig.enableContainerBorder
val borderModifier = if (enableBorder && borderStyle == "solid") {
Modifier.border(borderWidth, borderColor, MaterialTheme.shapes.small)
} else if (enableBorder) {
val dashWidth = ThemeConfig.containerBorderDashWidth
val pathEffect = when (borderStyle) {
"dashed" -> PathEffect.dashPathEffect(floatArrayOf(dashWidth, dashWidth))
"dotted" -> PathEffect.dashPathEffect(floatArrayOf(dashWidth / 2, dashWidth))
else -> null
}
Modifier.drawWithContent {
drawContent()
val cornerRadius = CornerRadius(8.dp.toPx(), 8.dp.toPx())
val halfStroke = borderWidth.toPx() / 2
drawRoundRect(
color = borderColor,
topLeft = Offset(halfStroke, halfStroke),
size = Size(size.width - borderWidth.toPx(), size.height - borderWidth.toPx()),
cornerRadius = cornerRadius,
style = Stroke(width = borderWidth.toPx(), pathEffect = pathEffect)
)
}
} else {
LegadoTheme.colorScheme.surface.copy(alpha = 0f)
Modifier
}
if (isGrid) {
Box(
modifier = modifier
@@ -209,8 +167,7 @@ fun BookshelfItem(
NormalCard(
modifier = modifier
.fillMaxWidth()
.padding(all = 4.dp)
.then(borderModifier),
.padding(all = 4.dp),
cornerRadius = 8.dp,
containerColor = if (isSelected) {
LegadoTheme.colorScheme.secondaryContainer
@@ -1,7 +1,6 @@
package io.legado.app.ui.rss.article
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -67,7 +66,6 @@ import io.legado.app.ui.widget.components.cover.buildCoverImageRequest
import io.legado.app.utils.toastOnUi
import io.legado.app.ui.config.themeConfig.ThemeConfig
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.Dp
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.flowOn
@@ -356,22 +354,11 @@ private fun RssArticleItem(
RssArticleLayout.Waterfall -> 3
}
// 边框设置
val borderModifier = if (ThemeConfig.enableContainerBorder) {
Modifier.border(
width = Dp(ThemeConfig.containerBorderWidth),
color = Color(ThemeConfig.containerBorderColor),
shape = RoundedCornerShape(12.dp)
)
} else {
Modifier
}
GlassCard(
onClick = { onClick(article) },
cornerRadius = 12.dp,
containerColor = containerColor,
modifier = Modifier.fillMaxWidth().then(borderModifier)
modifier = Modifier.fillMaxWidth()
) {
when (layout) {
RssArticleLayout.List -> {
@@ -1,14 +1,12 @@
package io.legado.app.ui.widget.components
import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf
@@ -44,13 +42,6 @@ fun SplicedColumnGroup(
items: @Composable ColumnScope.() -> Unit,
) {
val composeEngine = LegadoTheme.composeEngine
val enableBorder = ThemeConfig.enableContainerBorder
val borderWidth = ThemeConfig.containerBorderWidth.dp
val borderColor = if (ThemeConfig.containerBorderColor != 0) {
Color(ThemeConfig.containerBorderColor)
} else {
MaterialTheme.colorScheme.outline
}
val enableItemDivider = ThemeConfig.enableItemDivider
val currentIndex = remember { mutableIntStateOf(0) }
@@ -88,23 +79,8 @@ fun SplicedColumnGroup(
modifier = Modifier
.fillMaxWidth()
.animateContentSize()
.clip(RoundedCornerShape(16.dp))
.then(
if (enableBorder) {
Modifier.border(
width = borderWidth,
color = borderColor,
shape = RoundedCornerShape(16.dp)
)
} else {
Modifier
}
),
verticalArrangement = if (enableBorder) {
Arrangement.spacedBy(0.dp)
} else {
Arrangement.spacedBy(2.dp)
}
.clip(RoundedCornerShape(16.dp)),
verticalArrangement = Arrangement.spacedBy(2.dp)
) {
currentIndex.intValue = 0
items()
@@ -1,6 +1,5 @@
package io.legado.app.ui.widget.components.explore
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
@@ -40,14 +39,6 @@ fun ExploreKindItem(
val cornerRadius = 12.dp
val enableBorder = ThemeConfig.enableDeepPersonalization && ThemeConfig.enableContainerBorder
val borderWidth = (ThemeConfig.containerBorderWidth - 0.8f).coerceAtLeast(0.1f).dp
val borderColor = if (ThemeConfig.containerBorderColor != 0) {
androidx.compose.ui.graphics.Color(ThemeConfig.containerBorderColor)
} else {
LegadoTheme.colorScheme.outline
}
if (isClickable) {
GlassCard(
onClick = onClick,
@@ -55,9 +46,6 @@ fun ExploreKindItem(
containerColor = backgroundColor,
contentColor = LegadoTheme.colorScheme.onSurface,
modifier = modifier,
border = if (enableBorder) {
BorderStroke(borderWidth, borderColor)
} else null
) {
KindText(
text = displayText,
@@ -71,9 +59,6 @@ fun ExploreKindItem(
containerColor = backgroundColor,
contentColor = LegadoTheme.colorScheme.primary,
modifier = modifier,
border = if (enableBorder) {
BorderStroke(borderWidth, borderColor)
} else BorderStroke(1.dp, LegadoTheme.colorScheme.outlineVariant)
) {
KindText(
text = displayText,
@@ -2,9 +2,7 @@ package io.legado.app.ui.widget.components.explore
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsFocusedAsState
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@@ -320,17 +318,7 @@ private fun ExploreKindCompactTextField(
isMiuix: Boolean
) {
val interactionSource = remember { MutableInteractionSource() }
val isFocused by interactionSource.collectIsFocusedAsState()
val shape = RoundedCornerShape(10.dp)
val enableBorder = ThemeConfig.enableDeepPersonalization && ThemeConfig.enableContainerBorder
val borderWidth = ThemeConfig.containerBorderWidth.dp
val borderColor = if (ThemeConfig.containerBorderColor != 0) {
Color(ThemeConfig.containerBorderColor)
} else if (isFocused) {
LegadoTheme.colorScheme.primary
} else {
Color.Transparent
}
BasicTextField(
value = value,
@@ -342,8 +330,7 @@ private fun ExploreKindCompactTextField(
modifier = modifier
.height(34.dp)
.clip(shape)
.background(backgroundColor)
.border(width = borderWidth, color = borderColor, shape = shape),
.background(backgroundColor),
decorationBox = { innerTextField ->
Box(
modifier = Modifier