feat(accessibility): 优化无障碍表现
This commit is contained in:
parent
f6f6f565a1
commit
b16c2c2a85
5 changed files with 28 additions and 49 deletions
|
|
@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.safeContent
|
import androidx.compose.foundation.layout.safeContent
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.outlined.Add
|
||||||
import androidx.compose.material.icons.outlined.Delete
|
import androidx.compose.material.icons.outlined.Delete
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
|
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
|
||||||
|
|
@ -36,8 +37,8 @@ import androidx.window.core.layout.WindowWidthSizeClass
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.constants.Constants
|
import cn.super12138.todo.constants.Constants
|
||||||
import cn.super12138.todo.logic.database.TodoEntity
|
import cn.super12138.todo.logic.database.TodoEntity
|
||||||
|
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
|
||||||
import cn.super12138.todo.ui.components.WarningDialog
|
import cn.super12138.todo.ui.components.WarningDialog
|
||||||
import cn.super12138.todo.ui.pages.main.components.TodoFAB
|
|
||||||
import cn.super12138.todo.ui.pages.main.components.TodoTopAppBar
|
import cn.super12138.todo.ui.pages.main.components.TodoTopAppBar
|
||||||
import cn.super12138.todo.ui.viewmodels.MainViewModel
|
import cn.super12138.todo.ui.viewmodels.MainViewModel
|
||||||
|
|
||||||
|
|
@ -103,7 +104,9 @@ fun MainPage(
|
||||||
exit = shrinkOut() + fadeOut()
|
exit = shrinkOut() + fadeOut()
|
||||||
) {
|
) {
|
||||||
// TODO: 修复在滑动列表时FAB位移导致的动画不连贯(临时方案为底部加padding)
|
// TODO: 修复在滑动列表时FAB位移导致的动画不连贯(临时方案为底部加padding)
|
||||||
TodoFAB(
|
AnimatedExtendedFloatingActionButton(
|
||||||
|
icon = Icons.Outlined.Add,
|
||||||
|
text = stringResource(R.string.action_add_task),
|
||||||
expanded = true,
|
expanded = true,
|
||||||
onClick = {
|
onClick = {
|
||||||
viewModel.setEditTodoItem(null) // 每次添加待办前清除上一次已选待办
|
viewModel.setEditTodoItem(null) // 每次添加待办前清除上一次已选待办
|
||||||
|
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
package cn.super12138.todo.ui.pages.main.components
|
|
||||||
|
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.outlined.Add
|
|
||||||
import androidx.compose.material3.FloatingActionButtonDefaults
|
|
||||||
import androidx.compose.material3.FloatingActionButtonElevation
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import cn.super12138.todo.R
|
|
||||||
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 待办页面底部 FAB
|
|
||||||
*
|
|
||||||
* @param expanded 是否为展开状态(展开状态显示内容和图标,收起状态只显示图标)
|
|
||||||
* @param onClick 当点击 FAB 时的回调
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun TodoFAB(
|
|
||||||
expanded: Boolean,
|
|
||||||
onClick: () -> Unit,
|
|
||||||
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
|
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
|
||||||
AnimatedExtendedFloatingActionButton(
|
|
||||||
icon = Icons.Outlined.Add,
|
|
||||||
text = stringResource(R.string.action_add_task),
|
|
||||||
expanded = expanded,
|
|
||||||
elevation = elevation,
|
|
||||||
onClick = onClick,
|
|
||||||
modifier = modifier
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
@ -20,6 +20,7 @@ import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.platform.LocalView
|
import androidx.compose.ui.platform.LocalView
|
||||||
|
import androidx.compose.ui.semantics.Role
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
|
||||||
|
|
@ -38,10 +39,13 @@ fun DarkModeItem(
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.clip(MaterialTheme.shapes.large)
|
.clip(MaterialTheme.shapes.large)
|
||||||
.clickable {
|
.clickable(
|
||||||
VibrationUtils.performHapticFeedback(view)
|
role = Role.Button,
|
||||||
onSelect()
|
onClick = {
|
||||||
}
|
VibrationUtils.performHapticFeedback(view)
|
||||||
|
onSelect()
|
||||||
|
}
|
||||||
|
)
|
||||||
.padding(8.dp),
|
.padding(8.dp),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
) {
|
) {
|
||||||
|
|
@ -58,7 +62,7 @@ fun DarkModeItem(
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = icon,
|
imageVector = icon,
|
||||||
contentDescription = contentDescription,
|
contentDescription = null,
|
||||||
tint = contentColor,
|
tint = contentColor,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.size(30.dp)
|
.size(30.dp)
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,12 @@ fun LicenceList(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
FilledTonalButton(onClick = {
|
FilledTonalButton(
|
||||||
openDialog = false
|
onClick = {
|
||||||
VibrationUtils.performHapticFeedback(view)
|
openDialog = false
|
||||||
}) { Text(stringResource(R.string.action_confirm)) }
|
VibrationUtils.performHapticFeedback(view)
|
||||||
|
}
|
||||||
|
) { Text(stringResource(R.string.action_confirm)) }
|
||||||
},
|
},
|
||||||
onDismissRequest = { openDialog = false }
|
onDismissRequest = { openDialog = false }
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalView
|
import androidx.compose.ui.platform.LocalView
|
||||||
import androidx.compose.ui.res.colorResource
|
import androidx.compose.ui.res.colorResource
|
||||||
|
import androidx.compose.ui.semantics.Role
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.util.fastForEach
|
import androidx.compose.ui.util.fastForEach
|
||||||
import cn.super12138.todo.constants.GlobalValues
|
import cn.super12138.todo.constants.GlobalValues
|
||||||
|
|
@ -48,10 +49,13 @@ fun PaletteItem(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.width(90.dp)
|
.width(90.dp)
|
||||||
.clip(MaterialTheme.shapes.large)
|
.clip(MaterialTheme.shapes.large)
|
||||||
.clickable {
|
.clickable(
|
||||||
VibrationUtils.performHapticFeedback(view)
|
role = Role.Button,
|
||||||
onSelect()
|
onClick = {
|
||||||
}
|
VibrationUtils.performHapticFeedback(view)
|
||||||
|
onSelect()
|
||||||
|
}
|
||||||
|
)
|
||||||
.padding(8.dp),
|
.padding(8.dp),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue