控件优化

This commit is contained in:
HapeLee
2026-05-15 01:54:31 +08:00
parent 177045885c
commit 5cc126cf5b
15 changed files with 68 additions and 85 deletions
@@ -46,7 +46,7 @@ import io.legado.app.R
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.theme.adaptiveContentPadding
import io.legado.app.ui.theme.adaptiveHorizontalPadding
import io.legado.app.ui.widget.components.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.AppScaffold
import io.legado.app.ui.widget.components.alert.AppAlertDialog
import io.legado.app.ui.widget.components.button.SmallTonalIconButton
@@ -74,7 +74,7 @@ import io.legado.app.ui.book.search.ScopeSelectSheet
import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.book.source.manage.BookSourceActivity
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.widget.components.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.AppTextField
import io.legado.app.ui.widget.components.EmptyMessage
import io.legado.app.ui.widget.components.alert.AppAlertDialog
@@ -87,7 +87,7 @@ import io.legado.app.ui.book.info.ChangeSourceSheet
import io.legado.app.ui.book.info.GroupSelectSheet
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.theme.adaptiveContentPadding
import io.legado.app.ui.widget.components.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.AppTextField
import io.legado.app.ui.widget.components.alert.AppAlertDialog
import io.legado.app.ui.widget.components.button.SmallTonalIconButton
@@ -331,13 +331,10 @@ fun SearchScreen(
} else {
viewModel.onIntent(SearchIntent.LoadMore)
}
}
) {
AppIcon(
imageVector = if (state.isSearching) Icons.Default.Stop else Icons.Default.PlayArrow,
contentDescription = if (state.isSearching) stringResource(R.string.stop) else stringResource(R.string.start),
)
}
},
icon = if (state.isSearching) Icons.Default.Stop else Icons.Default.PlayArrow,
tooltipText = if (state.isSearching) stringResource(R.string.stop) else stringResource(R.string.start)
)
}
}
) { paddingValues ->
@@ -35,7 +35,6 @@ 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.AppFloatingActionButton
import io.legado.app.ui.widget.components.icon.AppIcon
import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet
import io.legado.app.ui.widget.components.text.AppText
import kotlinx.coroutines.launch
@@ -161,10 +160,9 @@ fun DictRuleEditSheet(
},
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(16.dp)
) {
AppIcon(Icons.Default.Save, contentDescription = "Save")
}
.padding(16.dp),
icon = Icons.Default.Save
)
}
}
}
@@ -19,8 +19,6 @@ import androidx.compose.material.icons.filled.FileOpen
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import io.legado.app.ui.widget.components.AppFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.LoadingIndicator
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.SnackbarHostState
@@ -52,6 +50,7 @@ import io.legado.app.data.entities.ReplaceRule
import io.legado.app.ui.theme.adaptiveContentPadding
import io.legado.app.ui.theme.adaptiveHorizontalPadding
import io.legado.app.ui.widget.components.ActionItem
import io.legado.app.ui.widget.components.AppFloatingActionButton
import io.legado.app.ui.widget.components.DraggableSelectionHandler
import io.legado.app.ui.widget.components.GroupManageBottomSheet
import io.legado.app.ui.widget.components.alert.AppAlertDialog
@@ -335,10 +334,9 @@ fun ReplaceRuleScreen(
onClick = {
onNavigateToEdit(ReplaceEditRoute(id = -1))
},
tooltipText = "Localized description"
) {
AppIcon(Icons.Default.Add, contentDescription = "Add Rule")
}
tooltipText = stringResource(R.string.add),
icon = Icons.Default.Add
)
},
snackbarHostState = snackbarHostState,
dropDownMenuContent = { dismiss ->
@@ -456,4 +454,3 @@ fun ReplaceRuleScreen(
}
}
}
@@ -42,6 +42,8 @@ import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.ExposedDropdownMenuAnchorType
import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.ui.res.stringResource
import io.legado.app.R
import io.legado.app.ui.widget.components.AppFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -162,10 +164,9 @@ fun ReplaceEditScreen(
alignment = Alignment.BottomEnd,
),
onClick = { viewModel.save(onSaveSuccess) },
tooltipText = "添加"
) {
AppIcon(Icons.Default.Save, contentDescription = "保存")
}
tooltipText = stringResource(R.string.action_save),
icon = Icons.Default.Save
)
}, contentWindowInsets = WindowInsets(0, 0, 0, 0)
) { innerPadding ->
Box(
@@ -45,6 +45,7 @@ import io.legado.app.ui.association.ImportBookSourceDialog
import io.legado.app.ui.association.ImportReplaceRuleDialog
import io.legado.app.ui.association.ImportRssSourceDialog
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.theme.adaptiveContentPadding
import io.legado.app.ui.widget.components.AppTextField
import io.legado.app.ui.widget.components.EmptyMessage
import io.legado.app.ui.widget.components.alert.AppAlertDialog
@@ -107,10 +108,9 @@ fun RuleSubScreen(
onClick = {
showEditDialog = RuleSub(customOrder = state.items.size + 1)
},
tooltipText = "Localized description"
) {
Icon(Icons.Default.Add, contentDescription = "Add Rule")
}
tooltipText = stringResource(R.string.add),
icon = Icons.Default.Add
)
}
) { paddingValues ->
if (state.items.isEmpty()) {
@@ -129,7 +129,10 @@ fun RuleSubScreen(
val typeArray = stringArrayResource(R.array.rule_type)
LazyColumn(
modifier = Modifier.fillMaxSize(),
contentPadding = paddingValues,
contentPadding = adaptiveContentPadding(
top = paddingValues.calculateTopPadding(),
bottom = paddingValues.calculateBottomPadding() + 120.dp
),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
items(state.items, key = { it.id }) { ruleSub ->
@@ -2,6 +2,7 @@ package io.legado.app.ui.widget.components
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.TooltipAnchorPosition
import androidx.compose.material3.TooltipBox
@@ -10,10 +11,13 @@ import androidx.compose.material3.rememberTooltipState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.theme.ThemeResolver
import io.legado.app.ui.widget.components.icon.AppIcon
import io.legado.app.ui.widget.components.text.AppText
import top.yukonga.miuix.kmp.basic.FloatingActionButton as MiuixFloatingActionButton
import top.yukonga.miuix.kmp.basic.Icon as MiuixIcon
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -21,17 +25,37 @@ fun AppFloatingActionButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
tooltipText: String? = null,
icon: ImageVector? = null,
containerColor: Color = LegadoTheme.colorScheme.primaryContainer,
contentColor: Color = LegadoTheme.colorScheme.onPrimaryContainer,
content: @Composable () -> Unit
content: (@Composable () -> Unit)? = null
) {
val isMiuix = ThemeResolver.isMiuixEngine(LegadoTheme.composeEngine)
val fabContent: @Composable () -> Unit = {
if (icon != null) {
if (isMiuix){
MiuixIcon(
imageVector = icon,
contentDescription = tooltipText,
tint = Color.White
)
} else {
Icon(
imageVector = icon,
contentDescription = tooltipText
)
}
} else {
content?.invoke()
}
}
if (isMiuix) {
MiuixFloatingActionButton(
onClick = onClick,
modifier = modifier,
content = content
content = fabContent
)
} else {
if (tooltipText != null) {
@@ -47,7 +71,7 @@ fun AppFloatingActionButton(
modifier = modifier,
containerColor = containerColor,
contentColor = contentColor,
content = content
content = fabContent
)
}
} else {
@@ -56,7 +80,7 @@ fun AppFloatingActionButton(
modifier = modifier,
containerColor = containerColor,
contentColor = contentColor,
content = content
content = fabContent
)
}
}
@@ -1,34 +0,0 @@
package io.legado.app.ui.widget.components
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import io.legado.app.ui.theme.LegadoTheme.composeEngine
import io.legado.app.ui.theme.ThemeResolver
// 这里建议使用 as 关键字为两个库的控件起别名,避免同名冲突
import androidx.compose.material3.LinearProgressIndicator
// 请替换为实际的 MIUIX 控件包名
import top.yukonga.miuix.kmp.basic.LinearProgressIndicator as MiuixLinearProgressIndicator
@Composable
fun AppLinearProgressIndicator(
modifier: Modifier = Modifier,
progress: Float? = null,
) {
if (ThemeResolver.isMiuixEngine(composeEngine)) {
MiuixLinearProgressIndicator(
modifier = modifier,
progress = progress
)
} else {
if (progress != null) {
LinearProgressIndicator(
progress = { progress },
modifier = modifier
)
} else {
LinearProgressIndicator(
modifier = modifier
)
}
}
}
@@ -14,7 +14,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.widget.components.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator
import io.legado.app.ui.widget.components.card.TextCard
@OptIn(ExperimentalSharedTransitionApi::class)
@@ -16,7 +16,6 @@ import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.FloatingToolbarDefaults.ScreenOffset
import androidx.compose.material3.Icon
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.animateFloatingActionButton
@@ -64,10 +63,9 @@ fun <T> ListScaffold(
visible = state.selectedIds.isEmpty(),
alignment = Alignment.BottomEnd,
),
tooltipText = "添加"
) {
Icon(Icons.Default.Add, contentDescription = "Add")
}
tooltipText = "添加",
icon = Icons.Default.Add
)
}
},
snackbarHostState: SnackbarHostState = remember { SnackbarHostState() },
@@ -38,7 +38,6 @@ import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.widget.components.AppFloatingActionButton
import io.legado.app.ui.widget.components.AppTextField
import io.legado.app.ui.widget.components.button.MediumIconButton
import io.legado.app.ui.widget.components.icon.AppIcon
import io.legado.app.ui.widget.components.menuItem.RoundDropdownMenu
import io.legado.app.ui.widget.components.menuItem.RoundDropdownMenuItem
import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet
@@ -164,10 +163,9 @@ fun <T> RuleEditSheet(
onClick = { onSave(getCurrentEntity()) },
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(16.dp)
) {
AppIcon(Icons.Default.Save, contentDescription = "Save")
}
.padding(16.dp),
icon = Icons.Default.Save
)
}
}
}
@@ -29,6 +29,7 @@ import io.legado.app.ui.widget.components.ActionItem
import io.legado.app.ui.widget.components.AppFloatingActionButton
import io.legado.app.ui.widget.components.SelectionActions
import io.legado.app.ui.widget.components.alert.AppAlertDialog
import io.legado.app.ui.widget.components.icon.AppIcon
import io.legado.app.ui.widget.components.list.ListScaffold
import io.legado.app.ui.widget.components.list.ListUiState
import io.legado.app.ui.widget.components.text.AppText
@@ -61,10 +62,9 @@ fun <T> RuleListScaffold(
visible = state.selectedIds.isEmpty(),
alignment = Alignment.BottomEnd,
),
tooltipText = "添加"
) {
Icon(Icons.Default.Add, contentDescription = "Add")
}
tooltipText = "添加",
icon = Icons.Default.Add
)
}
},
snackbarHostState: SnackbarHostState,