3. 车载系统与硬件平台

做车载UI设计,不能只懂画图。你得知道你的设计跑在什么系统上。这就像盖房子,你总得知道地基是什么材质。

我见过不少设计师,拿着手机端的交互习惯直接套到车机上,结果被系统底层限制搞得焦头烂额。嗯,今天我们就来把这层窗户纸捅破。

3.1 三大主流车载OS:谁在掌控你的屏幕?

目前市面上,真正能打的就三个:Android Automotive、QNX 和 Linux。它们各有各的脾气。

特性 Android Automotive QNX Linux (AGL / 定制)
内核 Linux (宏内核) 微内核 (真正的硬实时) Linux (宏内核)
安全性 中等 (依赖沙盒与权限) 极高 (ASIL-D 级别) 中等 (依赖社区维护)
生态 极丰富 (海量App) 封闭 (商业授权) 中等 (开源社区)
UI框架 Android Jetpack / Canvas Qt / Kanzi / C++ Qt / GTK / Flutter
典型客户 极氪、沃尔沃、福特 奔驰、宝马、奥迪 (仪表盘) 丰田、特斯拉 (早期)
启动速度 较慢 (5-15秒) 极快 (1-2秒) 中等 (3-8秒)

核心结论: 中控娱乐屏,Android Automotive 是主流;仪表盘和ADAS显示,QNX 是铁饭碗。Linux 则更像一个“万能胶”,哪里需要哪里贴。

我个人习惯,在项目启动前,先问清楚客户用的是哪个OS。这直接决定了你的设计交付物是 .apk 原型,还是 .qml 文件,或者只是一套标注图。

3.2 车载系统层级结构:从硬件到App的“三层楼”

不管底层是什么OS,车载系统的软件架构都逃不出这三层:HAL、Framework、App。你作为UI设计师,主要跟最上面那层打交道,但下面两层决定了你的设计能不能跑得流畅。

车载系统层级结构图 App 应用层 仪表盘UI | 中控娱乐 | HUD | 空调控制 Framework 框架层 窗口管理 | 输入系统 | 多屏策略 | 生命周期 HAL 硬件抽象层 GPU驱动 | 触摸屏 | 传感器 | 音频通道 UI设计师主要工作在 App 层,但必须理解 Framework 层的限制

3.2.1 HAL(硬件抽象层)

说白了,HAL 就是硬件厂商写给系统看的“说明书”。它把千奇百怪的硬件(屏幕、触摸IC、摄像头)包装成统一的接口。

对UI的影响: 屏幕的刷新率、触控采样率、色彩深度,都是在这一层决定的。我曾经遇到一个项目,HAL 层只支持 16位色,结果我设计的渐变背景全是色带,最后只能改设计稿。

3.2.2 Framework(框架层)

这是系统的“大脑”。它负责管理窗口、分发触摸事件、协调多屏显示。

举个例子,你在中控屏上滑动,Framework 会判断这个手势是给中控App,还是需要传递给仪表盘。如果 Framework 层没写好,就会出现“触摸漂移”或者“点击无响应”。

避坑指南: 设计多屏交互时,一定要跟系统工程师确认 Framework 是否支持“跨屏拖拽”。如果不支持,你画得再炫酷,开发也实现不了。

3.2.3 App(应用层)

这就是你的主战场了。所有的UI组件、动画、布局,都在这一层实现。但要注意,App 层不能直接操作硬件,它必须通过 Framework 提供的 API 来间接控制。

3.3 分辨率与屏幕适配策略

车载屏幕的尺寸,简直是百花齐放。从 7 寸的仪表盘,到 27 寸的一体屏,再到 49 寸的带鱼屏。你不可能为每个尺寸单独设计一套稿子。

3.3.1 主流分辨率一览

屏幕类型 常见分辨率 宽高比 典型应用
仪表盘 1920x720 / 1280x480 8:3 / 8:3 奥迪、宝马
中控竖屏 1240x2400 / 1080x1920 9:16 / 9:16 特斯拉 Model 3
中控横屏 1920x1080 / 2560x1440 16:9 / 16:9 理想 L9
一体屏 7680x1080 / 3840x720 32:9 / 48:9 奔驰 Hyperscreen
HUD 1920x540 / 1280x360 32:9 / 32:9 宝马 iDrive

3.3.2 我的适配三板斧

面对这么多分辨率,我总结了一套自己的方法,分享给你:

  1. 定基准分辨率:我习惯以 1920x1080 作为设计基准。这个尺寸覆盖了大部分横屏中控,而且开发资源最成熟。
  2. 用 dp 代替 px:在 Android Automotive 上,一定要用 dp(密度无关像素)来标注。1dp 在不同密度的屏幕上,物理尺寸是基本一致的。你想想看,如果直接用 px,在 2K 屏上你的按钮会小得没法点。
  3. 布局用 ConstraintLayout:绝对定位在车载上是死路。必须用相对布局,让系统根据屏幕宽度自动计算间距和大小。

注意: 不要完全依赖“等比缩放”。在超宽屏(32:9)上,等比缩放会让你的UI变得又扁又宽,信息密度严重失衡。这时候需要做“断点设计”,在特定宽度下切换布局。

3.3.3 代码层面的适配示例

这里给前端开发同学一个参考。在 Android Automotive 中,我们通常这样处理多屏适配:

// 在 values-swXXXdp 中定义不同屏幕宽度的布局
// 例如:values-sw600dp (7寸平板), values-sw1024dp (10寸中控)

// 核心思路:使用 ConstraintLayout 的百分比约束
<Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintWidth_percent="0.3"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

// 字体大小使用 sp,并跟随系统设置
android:textSize="16sp"

嗯,这里要注意。车载屏幕的 触摸目标尺寸 有硬性要求。根据 ISO 9241 标准,最小触摸区域不能小于 48dp x 48dp,我一般建议做到 56dp,这样驾驶员在颠簸路段也能准确点击。

3.4 总结一下

车载系统架构,说白了就是一套“规则”。你理解了 Android Automotive 的生态、QNX 的硬实时、Linux 的灵活性,就能在设计时避开很多坑。

记住,你的设计不是孤立的艺术品,它是跑在特定硬件和系统上的“功能”。下次再遇到“这个动画为什么卡顿”或者“这个按钮为什么点不到”的问题,别急着改设计,先看看是不是系统层级的限制。