diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/components/Dialogs.kt b/app/src/main/kotlin/cn/super12138/todo/ui/components/Dialogs.kt index 3e278f4..25e9966 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/components/Dialogs.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/components/Dialogs.kt @@ -1,5 +1,8 @@ package cn.super12138.todo.ui.components +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ErrorOutline import androidx.compose.material3.AlertDialog @@ -103,7 +106,11 @@ fun BasicDialog( AlertDialog( icon = icon, title = title, - text = text, + text = { + Column(modifier = Modifier.verticalScroll(rememberScrollState())) { + text?.let { it() } + } + }, confirmButton = confirmButton, dismissButton = dismissButton, onDismissRequest = onDismissRequest, diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt index 14157d9..ee79f9d 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt @@ -97,6 +97,7 @@ fun MainPage( enter = fadeIn() + expandIn(), exit = shrinkOut() + fadeOut() ) { + // TODO: 修复在滑动列表时FAB位移导致的动画不连贯 TodoFAB( expanded = isExpanded, onClick = { diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoTopAppBar.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoTopAppBar.kt index 892e50b..c76d143 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoTopAppBar.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoTopAppBar.kt @@ -29,6 +29,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import cn.super12138.todo.R import cn.super12138.todo.utils.VibrationUtils @@ -74,7 +75,9 @@ fun TodoTopAppBar( R.string.title_selected_count, selectedTodoIds.size ) - } + }, + maxLines = 1, + overflow = TextOverflow.Ellipsis ) }, actions = { diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsDialogs.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsDialogs.kt index 1ce5b84..dd9a1c7 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsDialogs.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsDialogs.kt @@ -33,7 +33,6 @@ fun SettingsRadioDialog( onDismiss: () -> Unit, modifier: Modifier = Modifier, ) { - val view = LocalView.current SettingsDialog( visible = visible, title = title, @@ -42,33 +41,15 @@ fun SettingsRadioDialog( // Modifier.selectableGroup() 用来确保无障碍功能运行正确 Column(Modifier.selectableGroup()) { options.forEach { option -> - Row( - Modifier - .fillMaxWidth() - .height(56.dp) - .selectable( - selected = option.id == selectedItemIndex, - onClick = { - selectedItemIndex = option.id - VibrationUtils.performHapticFeedback(view) - onSelect(option.id) - onDismiss() - }, - role = Role.RadioButton - ) - .padding(horizontal = 16.dp), - verticalAlignment = Alignment.CenterVertically - ) { - RadioButton( - selected = option.id == selectedItemIndex, - onClick = null // 设置为 null 有利于屏幕阅读器 - ) - Text( - text = option.text, - style = MaterialTheme.typography.bodyLarge, - modifier = Modifier.padding(start = 16.dp) - ) - } + RadioItem( + selected = option.id == selectedItemIndex, + text = option.text, + onClick = { + selectedItemIndex = option.id + onSelect(option.id) + onDismiss() + } + ) } } }, @@ -77,6 +58,41 @@ fun SettingsRadioDialog( ) } +@Composable +fun RadioItem( + selected: Boolean, + text: String, + onClick: () -> Unit, + modifier: Modifier = Modifier +) { + val view = LocalView.current + Row( + Modifier + .fillMaxWidth() + .height(56.dp) + .selectable( + selected = selected, + onClick = { + VibrationUtils.performHapticFeedback(view) + onClick() + }, + role = Role.RadioButton + ), + // .padding(horizontal = TodoDefaults.screenPadding), + verticalAlignment = Alignment.CenterVertically + ) { + RadioButton( + selected = selected, + onClick = null // 设置为 null 有利于屏幕阅读器 + ) + Text( + text = text, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(start = 16.dp) + ) + } +} + data class SettingsRadioOptions( val id: Int, val text: String,