本部分详细介绍了如何自定义控制中心参考应用和界面。
用户流和界面
本部分介绍了用户流以及如何启动控制中心。
启动控制中心
您可以通过应用启动器 或系统界面导航栏 上的图标启动控制中心。该图标仅显示在已启用
后台可见用户的 build 中(如需了解详情,请参阅 UserHandleAware)。
您可以随时查看控制中心。控制中心由半透明窗口和透明背景组合而成,因此可以显示在任何其他应用之上,包括正在播放的视频和媒体。在应用的着陆页 上:
- 屏幕排列方式以及本地 和远程 屏幕的使用方式。
- 填充了媒体和媒体控件的屏幕。
- 每个屏幕如何引入媒体(及更多)控件的详细视图。
屏幕的排列方式代表了车辆中屏幕的布局。每个屏幕都是一个 DevicePickerScreen。如需自定义每个屏幕的位置和大小,请使用运行时资源叠加层 (RRO)。如需了解详情,
请参阅在运行时更改应用资源的值。
对于打开控制中心的每个显示屏,系统都会显示一个带有亮色突出显示边框的不同屏幕。这是本地 屏幕,即正在使用的显示屏。
其他每个屏幕都是一个远程 屏幕,用于表示车辆中的不同显示屏,您可以根据 Fragment 中屏幕的排列方式来识别这些显示屏。如需计算车辆中配置的乘员区域总数,请使用 CarOccupantZoneManager#getAllOccupantZones。
每个屏幕都定义了一个自定义属性 controlcenter:occupantZoneId,用于将数据与相应的乘员区域相关联。当媒体应用在特定显示屏上播放时,相应屏幕会显示媒体专辑封面。屏幕下方会显示一个播放 (或暂停 )按钮。
如果活跃的媒体应用是可见任务(在控制中心后面打开),则位于播放 按钮旁边的分享 按钮会启用,以打开镜像页面 。分享 可让您分享媒体应用显示屏,对于包含视频的媒体应用来说最有用。
屏幕元素
点按屏幕会显示在显示屏上播放的媒体的详细视图。 这称为详情屏幕 。该视图会显示媒体元数据,例如标题、播放进度和艺人。这些按钮可提供对乘员区域的额外控制。
音频输出 会显示哪个音频输出正在播放媒体,例如车厢扬声器或耳机。音频输出 会打开一个对话框,用于更改音频输出和媒体音量。
显示屏输入锁定 会锁定对屏幕的输入。此操作无法应用于驾驶员的屏幕。
显示屏电源 会关闭屏幕的电源。此操作无法应用于驾驶员的屏幕。
当媒体是控制中心应用后面的可见任务时,详情 视图会显示一个分享 按钮,供您点按。分享 会打开镜像页面 :
开始共同观看会话
镜像页面 与使用 RRO 的着陆页 类似。
如需添加屏幕以共同观看,请点按该屏幕,然后点按完成 。
这样做会打开一个 Mirroring Activity,其中托管着共享应用,并提供浮动式临时控件,以便离开共同观看会话或重新进入镜像页面 以添加或移除参与者。
摘要
控制中心中的不同页面在此处进行了总结。
自定义准则
控制中心使用车载设备界面库让您进行自定义,并提供 基本主题和结构,可以按原样采用,也可以按照 以下限制条件对其进行修改。
| 自定义 | 说明 |
|---|---|
| 应当 |
通过 RRO 调整整体主题和样式,例如:
|
| 可以 | 修改控制中心的高级界面结构。 |
控制中心是系统应用套件的一部分,其中包括媒体、通知中心和应用启动器。这些应用共享在 AOSP 结构的不同级别定义的样式和资源:
framework/base/coreTheme.DeviceDefault,即专为供 OEM
用于自定义设备默认外观而设计的主题。packages/services/Car/car_product/overlay:Theme.DeviceDefault 的替换项,用于为 Android Automotive 生成 AOSP 式的外观和风格。OEM 可能会选择排除此叠加层,改用自己的叠加层。packages/apps/Car/libs/car-ui-lib:packages/apps/Car/libs/car-apps-common:packages/services/Car/car_product/overlay)。packages/apps/Car/MultiDisplay/ControlCenter:Theme.CarUi,并在 car-ui-lib 中定义。ControlCenterActivity 使用自定义 Theme.Transparent,该主题扩展自 Theme.CarUi。为了支持需要镜像任务可见的流程(例如共同观看),控制中心使用了半透明窗口和透明背景的组合,这些窗口和背景不会将应用发送到后台或发送 Lifecycle events。
<style name="Theme.Transparent" parent="@style/Theme.CarUi.NoToolbar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@color/transparent</item>
</style>