外观
Alert — 内联提示条
页面内的一块提示(成功 / 错误 / 警告 / 信息)。不是 toast —— 它占位置、留在原地。
基本用法
kotlin
Alert(text = "已保存到本地", type = AlertType.SUCCESS)
Alert(
title = "强制更新",
text = "本次为强制更新,不更新将无法使用",
type = AlertType.WARNING,
)
Alert(text = "网络连接失败,请检查网络后重试", type = AlertType.ERROR)换图标:
kotlin
Alert(text = "已同步", type = AlertType.SUCCESS, icon = Phosphor.CloudCheck)参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier | Modifier | Modifier | 修饰符。内部会 fillMaxWidth() |
text | String | — | 提示正文 |
type | AlertType | AlertType.WARNING | 语义类型。默认是警告,不是信息 |
icon | ImageVector? | null | 自定义图标;null 时用类型自带的(20dp) |
title | String? | null | 可选标题。传了才多一行 |
colors | AlertColors | AlertDefaults.colors() | 九槽位配色 |
AlertType 与默认图标
| 值 | 默认图标 | 用在哪 |
|---|---|---|
SUCCESS | Phosphor.CheckCircle | 操作成功 |
ERROR | Phosphor.XCircle | 失败、异常 |
WARNING | Phosphor.Warning | 有代价的操作、强制更新 |
INFO | Phosphor.Info | 中性说明 |
AlertColors
| 字段 | 默认值 |
|---|---|
successContainer | MaterialTheme.colorScheme.primaryContainer |
successContent | MaterialTheme.colorScheme.onPrimaryContainer |
errorContainer | MaterialTheme.colorScheme.errorContainer |
errorContent | MaterialTheme.colorScheme.onErrorContainer |
warningContainer | MaterialTheme.colorScheme.tertiaryContainer |
warningContent | MaterialTheme.colorScheme.onTertiaryContainer |
infoContainer | MaterialTheme.colorScheme.surfaceContainerHighest |
infoContent | MaterialTheme.colorScheme.onSurface |
infoBorderColor | MaterialTheme.colorScheme.outlineVariant |
要点
type默认是WARNING。 想要普通提示得显式传AlertType.INFO—— 不传就得到一条琥珀色警告条。title会连带把正文降一档字号。 有标题时标题用titleSmall、正文用bodySmall;没标题时正文用bodyMedium。两行结构自动成立,不用自己调字号。INFO是唯一带描边的。 它用的是中性灰容器,压在同样灰的底上会「消失」,所以要补一圈1.dp边框把它框出来。三种彩色容器自带辨识度,不需要。- 它是「留在原地」的提示条,不是浮层。 需要自动消失的用 toast / popup 那类;需要用户做决定的用对话框。
Alert用在表单校验失败、权限说明、设置项下方的解释这类长期可见的位置。 - 别自己给容器色。 九槽位配色已经跟
colorScheme挂钩,换配色方案、切对比度档、动态取色时会自动跟着变。
说明
- 四种状态各自对应一个 M3 颜色槽位:
SUCCESS → primaryContainer、ERROR → errorContainer、WARNING → tertiaryContainer、INFO → surfaceContainerHighest + 描边。容器色 +on*前景色成对取用,深浅主题下都自动成立,本文件不留任何字面量色值。 - 为什么
SUCCESS借用主色容器:M3 的 45 个槽位里只有error自带语义,success/warning没有对应槽位。补齐有两条路 —— 一是再维护一套「扩展配色」(明暗各一份 +CompositionLocal转发 + 页面级读取入口),二是借用语义最接近的槽位。这里走第二条:状态色不属于配色方案,为它撑起第二套主题系统不划算。 - 语义修正是有来由的:原先
SUCCESS用的是colorScheme.primary—— 也就是「成功」和「品牌主色」是同一个颜色,同时WARNING又用onSurfaceVariant(灰)。结果是成功提示看起来像普通强调,而「成功」和「警告」在视觉上根本分不出来。现在四项分开,各自可辨。