以下文章来源于AndroidPub ,作者fundroid
资深Android研发&面试官,定期分享原创技术文章、学习资料、实用面经等。欢迎关注和投稿~
本文原作者: fundroid,原文发布于: AndroidPub
前言
配色个性化
M3 最大特色在于对个性化的注重,就如同 "You" 的命名一样。一个集中体现就是动态配色 (Dynamic Color)。支持了 M3 的 (比如搭载 Android 12 的 Pixel 系列手机) 设备,可以根据壁纸颜色动态改变 App 或 Widget 的主题。
动态配色是建立在 ColorScheme 基础上,系统通过算法从当前壁纸中提取并更新 ColorScheme。我们在应用中通过 duyamicColorScheme 可以观察到这种变化并自动应用。下面以 Compose-M3 代码为例:
val dynamic = Build.VERSION.SOK_INT >= Build.VERSION_CODES.Sval colorScheme = if (dynamic) {val context = LocalContext.current// 使用 dynamicLightColorScheme 函数创建具有浅色动态值的 ColorScheme 实例// 或使用 dynamicDarkColorScheme 创建具有深色动态值的实例// 传入 Context 以便从 Android 系统获取动态配色资源if (dark) dynamiclightColorScheme(context) else dynamicDarkColorScheme(context)} else {// 使用 lightColorScheme 或者 darkColorScheme}
多屏幕尺寸适配
M3 的一个重要设计原则是 UI 的适应不同屏幕尺寸,给出更合理的布局方式。M3 给了很多跨屏幕设计的细则,例如菜单栏如何摆放,Detail-List 如何同屏显示,甚至布局切换的过渡动画等,但是所有这一切的基础是给出了一套屏幕类型的标准,任何屏幕尺寸都可以分为 Compact/Medium/Expanded。
enum class WindowSizeClass { Compact, Medium, Expanded }fun MyApp(windowSizeClass: WindowSizeClass) {// Select a navigation element based on window size.when (windowSizeClass) {WindowSizeClass.Compact -> { /* Bottom bar */ }WindowSizeClass.Medium -> { /* Rail */ }WindowSizeClass.Expanded -> { /* Persistent drawer */ }}}
颜色 Color
颜色槽表格中,纵向按照使用场景以及重要度进行分类,就像一场表演中有主角和配角,主次分明的作品才更加好看。按照场景可以归为三类:
以 Primary 色槽为例:
class ColorScheme(primary: Color,onPrimary: Color,/*..省略..*/)
在 Theme 中通过设置 ColorScheme 来设置主题颜色:
import androidx.compose.material3.MaterialThemeMaterialTheme (colorScheme: ColorScheme,typography: Typography,// 更新 Shape 的功能即将到来content: () -> Unit)
形状 Shape
形状方面,首先形状的分类方式上 M3 与 M2 发生了变化:
| M2 | M3 |
|---|---|
M2 按照组件本身的尺寸进行分类: Small/Medium/Large,而 M3 是针对组件的圆角的弧度进行分为七类: 从 None 到 Full,每一种组件都具备更多的表达方式,使得 UI 更具表现力。
文字 Typography
| M2 | M3 |
|---|---|
以上,颜色、形状、文字是 MD 的三大基本规范,系统默认组件通过应用这些规范,形成特有的视觉风格。M3 的 UI 组件视觉上整体呈现两大特点,一是更加圆润,二是面积更大,在当下大屏盛行的设备中使得点击区域更加明显。接下来盘点一下各种基础组件的设计上的具体变化。
FAB 悬浮按钮
形状从圆形变为圆角矩形;
新增了一种 Large(96dp) 的大尺寸 FAB,M2 默认只有 Default(56dp) 和 Mini(40dp) 两种尺寸;
默认背景色由 Primary 变为 Primary Container;
Extended Fab 的高度与 Fab 进行了对齐,视觉更统一,M2 中两者高度稍有不同。
Button 按钮
Chip 标签
半圆变为圆角矩形 (好似 M3 和 M2 在组件形状上进行了圆形<>圆角的互换...);
功能种类的调整,Actioin 类 Chip 被拆分为 Assist 和 Suggestion 类型;
默认没有留阴影 (elevation = 0),M3 的组件通过加深边框的颜色对比度,取消了不少阴影元素,整体上弱化了拟物风格。
TopAppBar 标题栏
默认取消阴影,当滚动后会增加阴影 (Elevation = 2);
高度增加,字体变大;
M3 中删除了 M2 中 Primary Variant 的定义,这原本是用在 StatusBar 中的颜色比 Primay 更深,M2 StatusBar 也是 Primary,打造沉浸化标题栏。
Switch 开关
NavigationBar 导航栏
首先名称发生变化,M2 称为 Bottom Navigation,M3 统一称呼 NavigationBar;
取消了阴影,增加了高度;
M2 通过颜色的透明度表示选中状态,M3 则是添加了 Outline。
Dialog 对话框
增大了 Title 的字体;
增大了 Padding;
圆角弧度更大。
除了上述组件,其他组件的样式变化不大,大多是取消阴影,增大面积之类,不再赘述。
最后
长按右侧二维码
查看更多开发者精彩分享
"开发者说·DTalk" 面向中国开发者们征集 Google 移动应用 (apps & games) 相关的产品/技术内容。欢迎大家前来分享您对移动应用的行业洞察或见解、移动开发过程中的心得或新发现、以及应用出海的实战经验总结和相关产品的使用反馈等。我们由衷地希望可以给这些出众的中国开发者们提供更好展现自己、充分发挥自己特长的平台。我们将通过大家的技术内容着重选出优秀案例进行谷歌开发技术专家 (GDE) 的推荐。
点击屏末 | 阅读原文 | 即刻报名参与 "开发者说·DTalk"