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

This commit is contained in:
HapeLee committed 2026-05-13 01:31:32 +08:00
1 parent c6cb67ae94
commit 14ac91246d
8 files changed
+9 -206

No files matched your search

@@ -150,11 +150,6 @@ object ThemeImportExport {
// 容器设置 // 容器设置
containerOpacity = ThemeConfig.containerOpacity, containerOpacity = ThemeConfig.containerOpacity,
enableContainerBorder = ThemeConfig.enableContainerBorder,
containerBorderWidth = ThemeConfig.containerBorderWidth,
containerBorderStyle = ThemeConfig.containerBorderStyle,
containerBorderColor = ThemeConfig.containerBorderColor,
containerBorderDashWidth = ThemeConfig.containerBorderDashWidth,
// 分割线设置 // 分割线设置
enableItemDivider = ThemeConfig.enableItemDivider, enableItemDivider = ThemeConfig.enableItemDivider,
@@ -238,11 +233,6 @@ object ThemeImportExport {
// 容器设置 // 容器设置
ThemeConfig.containerOpacity = data.containerOpacity 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 ThemeConfig.enableItemDivider = data.enableItemDivider
@@ -379,11 +369,6 @@ data class ThemeExportData(
// 容器设置 // 容器设置
val containerOpacity: Int = 100, 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, val enableItemDivider: Boolean = false,
@@ -98,16 +98,6 @@ object ThemeConfig {
var labelContainerColor by prefDelegate(PreferKey.labelContainerColor, 0) 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 enableItemDivider by prefDelegate(PreferKey.enableItemDivider, false)
var itemDividerWidth by prefDelegate(PreferKey.itemDividerWidth, 1f) var itemDividerWidth by prefDelegate(PreferKey.itemDividerWidth, 1f)
@@ -136,7 +136,6 @@ fun ThemeConfigScreen(
var showRestartDialog by remember { mutableStateOf(false) } var showRestartDialog by remember { mutableStateOf(false) }
var showLauncherIconPicker by remember { mutableStateOf(false) } var showLauncherIconPicker by remember { mutableStateOf(false) }
var showBorderColorPicker by remember { mutableStateOf(false) } var showBorderColorPicker by remember { mutableStateOf(false) }
var currentBorderColorKey by remember { mutableStateOf("containerBorderColor") }
var showNavIconSheet by remember { mutableStateOf(false) } var showNavIconSheet by remember { mutableStateOf(false) }
var showFontSheet by remember { mutableStateOf(false) } var showFontSheet by remember { mutableStateOf(false) }
var fontItems by remember { mutableStateOf<List<FileDoc>>(emptyList()) } var fontItems by remember { mutableStateOf<List<FileDoc>>(emptyList()) }
@@ -609,62 +608,9 @@ fun ThemeConfigScreen(
} }
} }
// Border settings // Container settings
item { item {
SplicedColumnGroup(title = "容器设置") { 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( SwitchSettingItem(
title = "显示分割线", title = "显示分割线",
checked = ThemeConfig.enableItemDivider, checked = ThemeConfig.enableItemDivider,
@@ -693,7 +639,6 @@ fun ThemeConfigScreen(
title = "分割线颜色", title = "分割线颜色",
option = if (ThemeConfig.itemDividerColor != 0) "#${Integer.toHexString(ThemeConfig.itemDividerColor).uppercase()}" else stringResource(R.string.click_to_select), option = if (ThemeConfig.itemDividerColor != 0) "#${Integer.toHexString(ThemeConfig.itemDividerColor).uppercase()}" else stringResource(R.string.click_to_select),
onClick = { onClick = {
currentBorderColorKey = "itemDividerColor"
showBorderColorPicker = true showBorderColorPicker = true
}, },
trailingContent = { trailingContent = {
@@ -790,17 +735,11 @@ fun ThemeConfigScreen(
ColorPickerSheet( ColorPickerSheet(
show = showBorderColorPicker, show = showBorderColorPicker,
initialColor = when (currentBorderColorKey) { initialColor = ThemeConfig.itemDividerColor,
"containerBorderColor" -> ThemeConfig.containerBorderColor
"itemDividerColor" -> ThemeConfig.itemDividerColor
else -> 0
},
onDismissRequest = { showBorderColorPicker = false }, onDismissRequest = { showBorderColorPicker = false },
onColorSelected = { onColorSelected = {
when (currentBorderColorKey) { ThemeConfig.itemDividerColor = it
"containerBorderColor" -> ThemeConfig.containerBorderColor = it showBorderColorPicker = false
"itemDividerColor" -> ThemeConfig.itemDividerColor = it
}
} }
) )
@@ -813,10 +752,7 @@ fun ThemeConfigScreen(
imageVector = Icons.Default.Delete, imageVector = Icons.Default.Delete,
contentDescription = "清除", contentDescription = "清除",
onClick = { onClick = {
fontFolderUri = null
context.putPrefString(PreferKey.fontFolder, "")
ThemeConfig.appFontPath = null ThemeConfig.appFontPath = null
fontItems = emptyList()
showFontSheet = false showFontSheet = false
} }
) )
@@ -5,7 +5,6 @@ import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionScope import androidx.compose.animation.SharedTransitionScope
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@@ -29,16 +28,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.draw.shadow 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.Brush
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.PathEffect
import androidx.compose.ui.graphics.Shadow import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@@ -101,41 +94,6 @@ fun BookshelfItem(
LegadoTheme.colorScheme.cardContainer 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) { if (isGrid) {
Box( Box(
modifier = modifier modifier = modifier
@@ -209,8 +167,7 @@ fun BookshelfItem(
NormalCard( NormalCard(
modifier = modifier modifier = modifier
.fillMaxWidth() .fillMaxWidth()
.padding(all = 4.dp) .padding(all = 4.dp),
.then(borderModifier),
cornerRadius = 8.dp, cornerRadius = 8.dp,
containerColor = if (isSelected) { containerColor = if (isSelected) {
LegadoTheme.colorScheme.secondaryContainer LegadoTheme.colorScheme.secondaryContainer
@@ -1,7 +1,6 @@
package io.legado.app.ui.rss.article package io.legado.app.ui.rss.article
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box 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.utils.toastOnUi
import io.legado.app.ui.config.themeConfig.ThemeConfig import io.legado.app.ui.config.themeConfig.ThemeConfig
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.Dp
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.flowOn
@@ -356,22 +354,11 @@ private fun RssArticleItem(
RssArticleLayout.Waterfall -> 3 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( GlassCard(
onClick = { onClick(article) }, onClick = { onClick(article) },
cornerRadius = 12.dp, cornerRadius = 12.dp,
containerColor = containerColor, containerColor = containerColor,
modifier = Modifier.fillMaxWidth().then(borderModifier) modifier = Modifier.fillMaxWidth()
) { ) {
when (layout) { when (layout) {
RssArticleLayout.List -> { RssArticleLayout.List -> {
@@ -1,14 +1,12 @@
package io.legado.app.ui.widget.components package io.legado.app.ui.widget.components
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.compositionLocalOf
@@ -44,13 +42,6 @@ fun SplicedColumnGroup(
items: @Composable ColumnScope.() -> Unit, items: @Composable ColumnScope.() -> Unit,
) { ) {
val composeEngine = LegadoTheme.composeEngine 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 enableItemDivider = ThemeConfig.enableItemDivider
val currentIndex = remember { mutableIntStateOf(0) } val currentIndex = remember { mutableIntStateOf(0) }
@@ -88,23 +79,8 @@ fun SplicedColumnGroup(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.animateContentSize() .animateContentSize()
.clip(RoundedCornerShape(16.dp)) .clip(RoundedCornerShape(16.dp)),
.then( verticalArrangement = Arrangement.spacedBy(2.dp)
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)
}
) { ) {
currentIndex.intValue = 0 currentIndex.intValue = 0
items() items()
@@ -1,6 +1,5 @@
package io.legado.app.ui.widget.components.explore package io.legado.app.ui.widget.components.explore
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -40,14 +39,6 @@ fun ExploreKindItem(
val cornerRadius = 12.dp 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) { if (isClickable) {
GlassCard( GlassCard(
onClick = onClick, onClick = onClick,
@@ -55,9 +46,6 @@ fun ExploreKindItem(
containerColor = backgroundColor, containerColor = backgroundColor,
contentColor = LegadoTheme.colorScheme.onSurface, contentColor = LegadoTheme.colorScheme.onSurface,
modifier = modifier, modifier = modifier,
border = if (enableBorder) {
BorderStroke(borderWidth, borderColor)
} else null
) { ) {
KindText( KindText(
text = displayText, text = displayText,
@@ -71,9 +59,6 @@ fun ExploreKindItem(
containerColor = backgroundColor, containerColor = backgroundColor,
contentColor = LegadoTheme.colorScheme.primary, contentColor = LegadoTheme.colorScheme.primary,
modifier = modifier, modifier = modifier,
border = if (enableBorder) {
BorderStroke(borderWidth, borderColor)
} else BorderStroke(1.dp, LegadoTheme.colorScheme.outlineVariant)
) { ) {
KindText( KindText(
text = displayText, text = displayText,
@@ -2,9 +2,7 @@ package io.legado.app.ui.widget.components.explore
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsFocusedAsState
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
@@ -320,17 +318,7 @@ private fun ExploreKindCompactTextField(
isMiuix: Boolean isMiuix: Boolean
) { ) {
val interactionSource = remember { MutableInteractionSource() } val interactionSource = remember { MutableInteractionSource() }
val isFocused by interactionSource.collectIsFocusedAsState()
val shape = RoundedCornerShape(10.dp) 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( BasicTextField(
value = value, value = value,
@@ -342,8 +330,7 @@ private fun ExploreKindCompactTextField(
modifier = modifier modifier = modifier
.height(34.dp) .height(34.dp)
.clip(shape) .clip(shape)
.background(backgroundColor) .background(backgroundColor),
.border(width = borderWidth, color = borderColor, shape = shape),
decorationBox = { innerTextField -> decorationBox = { innerTextField ->
Box( Box(
modifier = Modifier modifier = Modifier