[优化] 优化界面显示
This commit is contained in:
@@ -71,7 +71,7 @@ import io.legado.app.ui.widget.components.EmptyMessageView
|
||||
import io.legado.app.ui.widget.components.SearchBarSection
|
||||
import io.legado.app.ui.widget.components.lazylist.FastScrollLazyColumn
|
||||
import io.legado.app.ui.widget.components.lazylist.Scroller
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlobalModalBottomSheet
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlassModalBottomSheet
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class,
|
||||
@@ -390,7 +390,7 @@ fun BookmarkEditSheet(
|
||||
var bookText by remember { mutableStateOf(bookmark.bookText) }
|
||||
var content by remember { mutableStateOf(bookmark.content) }
|
||||
|
||||
GlobalModalBottomSheet(
|
||||
GlassModalBottomSheet(
|
||||
onDismissRequest = onDismiss,
|
||||
sheetState = sheetState
|
||||
) {
|
||||
|
||||
@@ -97,7 +97,7 @@ import io.legado.app.ui.widget.components.AnimatedTextLine
|
||||
import io.legado.app.ui.widget.components.Cover
|
||||
import io.legado.app.ui.widget.components.SearchBarSection
|
||||
import io.legado.app.ui.widget.components.TextCard
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlobalModalBottomSheet
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlassModalBottomSheet
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
@@ -181,7 +181,7 @@ fun ExploreShowScreen(
|
||||
skipPartiallyExpanded = true
|
||||
)
|
||||
|
||||
GlobalModalBottomSheet(
|
||||
GlassModalBottomSheet(
|
||||
sheetState = sheetState,
|
||||
modifier = Modifier
|
||||
.padding(16.dp),
|
||||
@@ -242,7 +242,7 @@ fun ExploreShowScreen(
|
||||
}
|
||||
)
|
||||
|
||||
GlobalModalBottomSheet(
|
||||
GlassModalBottomSheet(
|
||||
onDismissRequest = { showKindSheet = false },
|
||||
sheetState = sheetState,
|
||||
modifier = Modifier
|
||||
|
||||
@@ -21,7 +21,6 @@ import androidx.compose.material3.FloatingActionButton
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.ModalBottomSheet
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
@@ -39,6 +38,7 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.legado.app.R
|
||||
import io.legado.app.data.entities.DictRule
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlassModalBottomSheet
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@@ -58,7 +58,7 @@ fun DictRuleEditSheet(
|
||||
var showRule by remember(rule) { mutableStateOf(rule?.showRule ?: "") }
|
||||
var showMenu by remember { mutableStateOf(false) }
|
||||
|
||||
ModalBottomSheet(
|
||||
GlassModalBottomSheet(
|
||||
onDismissRequest = onDismissRequest,
|
||||
sheetState = sheetState,
|
||||
) {
|
||||
|
||||
@@ -11,7 +11,6 @@ import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -30,7 +29,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.legado.app.R
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlobalModalBottomSheet
|
||||
import io.legado.app.ui.widget.components.GlassCard
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlassModalBottomSheet
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -43,7 +43,7 @@ fun GroupManageBottomSheet(
|
||||
var editingGroup by remember { mutableStateOf<String?>(null) }
|
||||
var updatedGroupName by remember { mutableStateOf("") }
|
||||
|
||||
GlobalModalBottomSheet(
|
||||
GlassModalBottomSheet(
|
||||
onDismissRequest = onDismissRequest,
|
||||
sheetState = sheetState
|
||||
) {
|
||||
@@ -60,7 +60,7 @@ fun GroupManageBottomSheet(
|
||||
)
|
||||
LazyColumn(verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
items(groups) { group ->
|
||||
Card(modifier = Modifier.fillMaxWidth()) {
|
||||
GlassCard(modifier = Modifier.fillMaxWidth()) {
|
||||
if (editingGroup == group) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
|
||||
@@ -20,15 +20,13 @@ fun AppTheme(
|
||||
val isPureBlack by ThemeState.isPureBlack.collectAsState()
|
||||
val hasImageBg by ThemeState.hasImageBg.collectAsState()
|
||||
val paletteStyle by ThemeState.paletteStyle.collectAsState()
|
||||
val opacity by ThemeState.containerOpacity.collectAsState()
|
||||
|
||||
val colorScheme = ThemeManager.getColorScheme(
|
||||
mode = appThemeMode,
|
||||
darkTheme = darkTheme,
|
||||
isAmoled = isPureBlack,
|
||||
isImageBg = hasImageBg,
|
||||
paletteStyle = paletteStyle,
|
||||
opacity = opacity
|
||||
paletteStyle = paletteStyle
|
||||
)
|
||||
|
||||
MaterialExpressiveTheme(
|
||||
|
||||
@@ -47,8 +47,7 @@ object ThemeManager {
|
||||
isAmoled: Boolean,
|
||||
isImageBg: Boolean,
|
||||
paletteStyle: String?,
|
||||
forceOpaque: Boolean = false,
|
||||
opacity: Int = 100
|
||||
forceOpaque: Boolean = false
|
||||
): ColorScheme {
|
||||
val context = LocalContext.current
|
||||
val style = resolvePaletteStyle(paletteStyle)
|
||||
@@ -93,18 +92,6 @@ object ThemeManager {
|
||||
)
|
||||
}
|
||||
|
||||
val alpha = opacity / 100f
|
||||
|
||||
return if (opacity < 100 && !forceOpaque) {
|
||||
scheme.copy(
|
||||
surfaceContainerLowest = scheme.surfaceContainerLowest.copy(alpha = alpha),
|
||||
surfaceContainerLow = scheme.surfaceContainerLow.copy(alpha = alpha),
|
||||
surfaceContainer = scheme.surfaceContainer.copy(alpha = alpha),
|
||||
surfaceContainerHigh = scheme.surfaceContainerHigh.copy(alpha = alpha),
|
||||
surfaceContainerHighest = scheme.surfaceContainerHighest.copy(alpha = alpha),
|
||||
)
|
||||
} else {
|
||||
scheme
|
||||
}
|
||||
return scheme
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,20 @@ package io.legado.app.ui.widget.components
|
||||
|
||||
import androidx.compose.animation.animateContentSize
|
||||
import androidx.compose.foundation.BorderStroke
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.grid.*
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.grid.GridCells
|
||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||
import androidx.compose.foundation.lazy.grid.items
|
||||
import androidx.compose.foundation.pager.HorizontalPager
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
@@ -11,17 +23,28 @@ import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowForward
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.FilledTonalIconButton
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import kotlinx.coroutines.launch
|
||||
import java.time.*
|
||||
import java.time.DayOfWeek
|
||||
import java.time.LocalDate
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.time.format.TextStyle
|
||||
import java.util.*
|
||||
import java.util.Locale
|
||||
|
||||
const val START_PAGE_OFFSET = 100
|
||||
|
||||
@@ -55,12 +78,14 @@ fun Calendar(
|
||||
}
|
||||
}
|
||||
|
||||
Card(
|
||||
GlassCard(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
shape = MaterialTheme.shapes.medium,
|
||||
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer)
|
||||
color = MaterialTheme.colorScheme.surfaceContainer
|
||||
) {
|
||||
Column(modifier = Modifier.padding(vertical = 12.dp).animateContentSize()) {
|
||||
Column(modifier = Modifier
|
||||
.padding(vertical = 12.dp)
|
||||
.animateContentSize()) {
|
||||
MonthNavigation(
|
||||
currentMonth = currentMonth,
|
||||
selectedDate = selectedDate,
|
||||
@@ -145,7 +170,9 @@ fun MonthNavigation(
|
||||
onClearClick: (() -> Unit)?
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth().padding(horizontal = 12.dp),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 12.dp),
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
@@ -246,7 +273,9 @@ fun DateItem(
|
||||
|
||||
Button(
|
||||
onClick = onClick,
|
||||
modifier = Modifier.size(36.dp).padding(4.dp),
|
||||
modifier = Modifier
|
||||
.size(36.dp)
|
||||
.padding(4.dp),
|
||||
shape = CircleShape,
|
||||
colors = buttonColors,
|
||||
border = borderStroke,
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package io.legado.app.ui.widget.components
|
||||
|
||||
import androidx.compose.foundation.BorderStroke
|
||||
import androidx.compose.foundation.layout.ColumnScope
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.CardElevation
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.Shape
|
||||
import io.legado.app.ui.theme.ThemeState
|
||||
|
||||
@Composable
|
||||
fun GlassCard(
|
||||
modifier: Modifier = Modifier,
|
||||
onClick: (() -> Unit)? = null,
|
||||
shape: Shape = CardDefaults.shape,
|
||||
color: Color = MaterialTheme.colorScheme.surface,
|
||||
elevation: CardElevation = CardDefaults.cardElevation(),
|
||||
border: BorderStroke? = null,
|
||||
content: @Composable ColumnScope.() -> Unit
|
||||
) {
|
||||
val opacity by ThemeState.containerOpacity.collectAsState()
|
||||
val cardColors = CardDefaults.cardColors(
|
||||
containerColor = color.copy(alpha = opacity / 100f)
|
||||
)
|
||||
|
||||
if (onClick != null) {
|
||||
Card(
|
||||
onClick = onClick,
|
||||
modifier = modifier,
|
||||
shape = shape,
|
||||
colors = cardColors,
|
||||
elevation = elevation,
|
||||
border = border,
|
||||
content = content
|
||||
)
|
||||
} else {
|
||||
Card(
|
||||
modifier = modifier,
|
||||
shape = shape,
|
||||
colors = cardColors,
|
||||
elevation = elevation,
|
||||
border = border,
|
||||
content = content
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -20,8 +20,6 @@ import androidx.compose.foundation.lazy.LazyItemScope
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.MoreVert
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.Checkbox
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -73,11 +71,11 @@ fun SelectionItemCard(
|
||||
label = "CardColor"
|
||||
)
|
||||
|
||||
Card(
|
||||
GlassCard(
|
||||
onClick = onToggleSelection,
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
shape = MaterialTheme.shapes.medium,
|
||||
colors = CardDefaults.cardColors(containerColor = containerColor)
|
||||
color = containerColor
|
||||
) {
|
||||
ListItem(
|
||||
modifier = Modifier.animateContentSize(),
|
||||
|
||||
@@ -10,11 +10,9 @@ import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.ChevronRight
|
||||
import androidx.compose.material.icons.filled.Info
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.ListItem
|
||||
import androidx.compose.material3.ListItemDefaults
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -103,11 +101,12 @@ fun SettingItem(
|
||||
) {
|
||||
var showMenu by remember { mutableStateOf(false) }
|
||||
|
||||
Card(
|
||||
GlassCard(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.animateContentSize(),
|
||||
shape = RoundedCornerShape(8.dp)
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
color = MaterialTheme.colorScheme.surfaceContainerLow,
|
||||
) {
|
||||
ListItem(
|
||||
modifier = modifier
|
||||
@@ -162,10 +161,7 @@ fun SettingItem(
|
||||
}
|
||||
}
|
||||
},
|
||||
trailingContent = trailingContent,
|
||||
colors = ListItemDefaults.colors(
|
||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||
)
|
||||
trailingContent = trailingContent
|
||||
)
|
||||
|
||||
if (dropdownMenu != null) {
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
package io.legado.app.ui.widget.components
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
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.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
/**
|
||||
@@ -39,11 +35,9 @@ fun SplicedColumnGroup(
|
||||
)
|
||||
}
|
||||
|
||||
Card(
|
||||
GlassCard(
|
||||
shape = RoundedCornerShape(16.dp),
|
||||
colors = CardDefaults.cardColors(
|
||||
containerColor = MaterialTheme.colorScheme.surface
|
||||
),
|
||||
color = MaterialTheme.colorScheme.surface,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Column(
|
||||
|
||||
@@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.MaterialTheme.colorScheme
|
||||
@@ -47,12 +45,10 @@ fun TextCard(
|
||||
textStyle: TextStyle = MaterialTheme.typography.labelSmall,
|
||||
bold: Boolean = true,
|
||||
) {
|
||||
Card(
|
||||
GlassCard(
|
||||
modifier = modifier,
|
||||
shape = RoundedCornerShape(cornerRadius),
|
||||
colors = CardDefaults.cardColors(
|
||||
containerColor = backgroundColor
|
||||
),
|
||||
color = backgroundColor
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier.padding(
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.legado.app.R
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlobalModalBottomSheet
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlassModalBottomSheet
|
||||
|
||||
enum class FilePickerSheetMode {
|
||||
DIR, FILE, EXPORT
|
||||
@@ -46,7 +46,7 @@ fun FilePickerSheet(
|
||||
onUpload: (() -> Unit)? = null,
|
||||
allowExtensions: Array<String>? = null,
|
||||
) {
|
||||
GlobalModalBottomSheet(
|
||||
GlassModalBottomSheet(
|
||||
onDismissRequest = onDismissRequest,
|
||||
sheetState = sheetState,
|
||||
containerColor = { it.surface }
|
||||
|
||||
+2
-2
@@ -61,7 +61,7 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.legado.app.R
|
||||
import io.legado.app.ui.widget.components.AnimatedText
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlobalModalBottomSheet
|
||||
import io.legado.app.ui.widget.components.modalBottomSheet.GlassModalBottomSheet
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
@@ -137,7 +137,7 @@ fun <T> BatchImportDialog(
|
||||
val selectedCount = importState.items.count { it.isSelected }
|
||||
val totalCount = importState.items.size
|
||||
|
||||
GlobalModalBottomSheet(
|
||||
GlassModalBottomSheet(
|
||||
onDismissRequest = onDismissRequest,
|
||||
sheetState = sheetState,
|
||||
containerColor = { it.surfaceContainer }
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ import io.legado.app.ui.theme.ThemeState
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
|
||||
@Composable
|
||||
fun GlobalModalBottomSheet(
|
||||
fun GlassModalBottomSheet(
|
||||
onDismissRequest: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
sheetState: SheetState = rememberModalBottomSheetState(),
|
||||
Reference in New Issue
Block a user