
AestheticDialogs 无障碍清单48dp 触控目标、读屏语义与 200% 字体缩放的 8 项保障【免费下载链接】AestheticDialogs An Android Library built with Jetpack Compose for fluid, beautiful, custom Dialogs.项目地址: https://gitcode.com/gh_mirrors/ae/AestheticDialogsAestheticDialogs 是一个基于 Jetpack Compose 的 Android 对话框设计系统它为 7 类对话框内置了一整套无障碍保障48dp 最小触控目标、TalkBack 读屏语义、横幅实时区域播报以及 200% 字体缩放下的布局验证。对新手来说你不需要自己拼semantics修饰符——这些正确性已经被框架层焊死本文用 8 项保障逐项说明它做对了什么方便你在新项目中直接复用或对照自查。8 项无障碍保障速览#保障解决什么问题关键源码148dp 触控目标按钮、行、关闭键都够大手指不用瞄准AestheticDimens.kt2对话框 paneTitle 语义TalkBack 一进来就知道这是哪个对话框DialogFramePrimitive.kt3焦点遍历组读屏焦点不跳出对话框DialogFramePrimitive.kt4标题 heading 语义可双指点按跳转到标题DialogHeaderPrimitive.kt5横幅 live region通知出现即播报错误音优先BannerPrimitive.kt6整行可选 单选/多选角色一行只播一次点击区是全宽而不是 20dpSelectionRowPrimitive.kt7200% 字体缩放置行大字体下正文可滚、按钮行始终可达DialogScreenshotTest.kt8减少动效降级系统动画关闭时过渡变瞬时切换AestheticMotion.kt1. 48dp 最小触控目标内置在尺寸令牌里Android 无障碍指南要求可交互元素不小于 48dp。AestheticDialogs 把它做成一个公开的语义令牌minTouchTarget 48.dp而不是散落在各处的魔法数字对话框按钮高度固定 48dp、最小宽度 88dp选择列表每行defaultMinSize(minHeight 48dp)整行都是点击区关闭按钮的 × 符号只有 24dp 大但触控区在符号周围扩展到 48dp——视觉不显臃肿手却能稳稳点中。这样做的工程含义任何一处出现裸dp字面量都会在评审中被打回48dp 是一条编译期纪律。2. 读屏语义 paneTitle一进对话框就知道名字每个对话框共用同一个窗口框架 DialogFramePrimitive.kt。框架给根节点挂了两个语义paneTitle把删除相册你已离线这样的标题交给读屏器TalkBack 进入对话框时先报对话框名isTraversalGroup true焦点遍历被关在对话框内部用户不会在读到一半时溜回背景页面。因为 7 类对话框共用这一个框架语义只写一次就保证了 7 类都正确——这正是重写为分层架构组件→变体→原语→令牌的动机之一详见 docs/ARCHITECTURE.md。3. 标题 heading 语义支持跳标题导航对话框标题文字额外标注了semantics { heading() }见 DialogHeaderPrimitive.kt。启用 TalkBack 跳标题导航的用户可以直接跳到标题定位每个对话框而不必逐行扫。顺带一提标题用正文主色绘制而非状态强调色——因为在白色背景上任何能用的黄色都达不到 4.5:1 对比度。可读性优先于装饰。4. 横幅 live region通知出现即播报2.x 的 5 种边缘横幅不再是模态窗口而是普通可组合节点。整张横幅被标记为 live region见 BannerPrimitive.kt普通消息用Polite不打断当前朗读错误消息升级为Assertive映射规则在 NotificationVariants.kt立即插队播报。读屏用户不需要去找屏幕顶部的提示消息自己会读出来。5. 选择列表整行可选 正确的角色语义多选/单选列表的每一行是真正的可选项单选行用Modifier.selectable(Role.RadioButton)多选行用Modifier.toggleable(Role.Checkbox)见 SelectionRowPrimitive.kt而里面的 Checkbox/Radio 控件传onClick null。效果是双份的TalkBack 把葡萄牙语单选按钮已选中一次性完整读出而不是先读一个无名控件再读一段无关文字同时整行 48dp 高都是点击区替代了 20dp 的小圆点目标。6. 细节语义加载按钮与关闭按钮也有名字读屏用户最容易遇到哑巴控件这里补了两处加载中的确认按钮注入stateDescription 正在加载TalkBack 报删除相册按钮正在加载同时标签以透明文本保留在布局树里按钮宽度不抖动无字形的关闭 ×图形是画出来的没有文字可借名所以单独给了contentDescription见 DialogHeaderPrimitive.kt。输入对话框打开时还会自动把焦点移到输入框——读屏用户一进入就能直接打字。7. 200% 字体缩放验证大字体下按钮依然够得着项目里所有文字都用sp随系统字体缩放布局在fontScale 2.0200%下经过截图测试验证用例见 DialogScreenshotTest.kt。框架层还有两条结构保障兜底正文区域超出上限时内部滚动标题和按钮行不滚走双按钮平分左右半行、标签换行而不溢出长译文和大字体都不会把确认按钮挤出屏幕。8. 减少动效动画关掉就是切不是快一点动效令牌AestheticMotion读取系统动画比例当用户关掉动画比例为 0时所有过渡直接坍缩为零时长硬切而不是缩短动画——因为无障碍设置要的是没有动画见 AestheticMotion.kt。单测 TokenSemanticsTest.kt 会断言这一行为防止它悄悄退化成短动画。对照自查这些保障如何被守住截图测试./gradlew recordRoborazziDebug/verifyRoborazziDebug记录并校验 200% 字体等基线截图单元断言TokenSemanticsTest断言色调→图形的映射每种色调都有独立图形标记颜色从来不是唯一信号深浅两套主题下强调色对比度达 4.5:1与动效降级逻辑架构约束语义集中写在框架/原语层变体只能填槽位从结构上杜绝某个对话框忘了加语义。把这份 8 项清单放进你的评审表48dp 触控目标、paneTitle、遍历组、heading、live region、整行可选角色、200% 字体验证、减少动效降级——缺一项读屏或大字体用户就会在真实使用里撞墙。【免费下载链接】AestheticDialogs An Android Library built with Jetpack Compose for fluid, beautiful, custom Dialogs.项目地址: https://gitcode.com/gh_mirrors/ae/AestheticDialogs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考