后屏投影:页面入口与资源
本篇梳理「后排投影」功能在设置 App 中的进入路径、Controller 绑定方式、相关字符串与图片资源。 调研来源:页面入口与资源 Agent + 对抗审查修正。
一、页面入口
1.1 从哪进入
用户路径:设置主页 → 显示与氛围 → 后排投影。
flowchart TD A["设置主页<br/>miauto_top_level_menu_fragment.xml"] -->|点击「显示」| B["DisplayAtmosphereSettingsFragment<br/>显示与氛围页"] B -->|getPreferenceScreenResId| C["miauto_display_atmosphere_settings_fragment.xml"] C --> D["MiCarPreferenceCategory<br/>后排投影分组"] D --> E["ImageTabPreference<br/>投影模式 Tab"] D --> F["MiCarNewSwitchPreference<br/>童锁开关"] E -->|settings:controller| G["RearProjectionModeTabController"] F -->|settings:controller| H["RearProjectionChildLockController"]
上层菜单入口(app/src/region/global/res/xml/miauto_top_level_menu_fragment.xml:89-94):
<!-- 显示 -->
<com.android.car.settings.miauto.preferences.VoiceAssistMenuPreference
android:fragment="...DisplayAtmosphereSettingsFragment"
android:key="@string/psk_settings_display_atmosphere_entry"
android:title="@string/top_level_menu_display_atmosphere"
settings:controller="...DefaultRestrictionsPreferenceController"
settings:menuIcon="@drawable/micarx_icon_brightness_3_fill" />1.2 Fragment 类型
DisplayAtmosphereSettingsFragment(settingsPage/micarDisplaySettings/.../miauto/display/DisplayAtmosphereSettingsFragment.java:53)继承 TopLevelSettingsFragment(一级页面,支持锚点定位)。
- 通过
getPreferenceScreenResId()(:65-68)返回R.xml.miauto_display_atmosphere_settings_fragment加载布局。 - 路由注解
@RouterProvider(path = DISPLAY_ATMOSPHERE_URI_PATH)(:51),支持深链跳转。路由常量定义在base/settingsBaseUi/.../pageroute/CarSettingsJump.kt:230-231。
1.3 条件显示(重要)
后排投影分组并非所有车型都显示,受配置开关控制(DisplayAtmosphereSettingsFragment.java:159-162):
// 是否包含后排投影
if (!MiCarSettings.isProjectorEnable()) {
ids.add(R.string.pk_settings_display_rear_projection_category); // 加入"需隐藏"列表
}即:
MiCarSettings.isProjectorEnable()为 false 时,整个「后排投影」分组被隐藏。这解释了为何该功能是车型相关的。
二、Controller 绑定方式
2.1 XML 节点(miauto_display_atmosphere_settings_fragment.xml:247-264)
<!-- 后排投影 -->
<com.android.car.settings.miauto.preferences.MiCarPreferenceCategory
android:key="@string/pk_settings_display_rear_projection_category"
android:title="@string/settings_display_rear_projection_category">
<!-- 投影模式 -->
<com.android.car.settings.miauto.preferences.ImageTabPreference
android:key="@string/pk_settings_display_rear_projection_mode_tab"
android:title="@string/settings_display_rear_projection_mode_title"
settings:selectable="false"
settings:controller="...RearProjectionModeTabController" />
<!-- 童锁 -->
<com.android.car.settings.miauto.preferences.MiCarNewSwitchPreference
android:key="@string/pk_settings_display_rear_projection_child_lock"
android:title="@string/settings_display_rear_projection_child_lock"
android:summary="@string/settings_display_rear_projection_child_lock_summary"
settings:controller="...RearProjectionChildLockController" />
<com.android.car.settings.miauto.preferences.MiCarSpaceDividerPreference/>
</com.android.car.settings.miauto.preferences.MiCarPreferenceCategory>2.2 绑定机制
Settings 框架标准方式:
- 根据
settings:controller属性值反射创建 Controller 实例。 - 根据
android:key(getString(R.string.pk_*))匹配 XML 中的 Preference。 - 建立 Controller ↔ Preference 绑定,Controller 的
preference字段即指向该 Preference。
注意模式 Tab 的
settings:selectable="false"——整个 Preference 不可整体选中(点击不进入二级页),交互完全交给内部 Tab。
三、preference_key 定义
均在 settingsPage/micarDisplaySettings/src/main/res/values/micar_preference_keys.xml,translatable="false":
| Key name | 行号 | 用途 |
|---|---|---|
pk_settings_display_rear_projection_category | :35 | 分组 |
pk_settings_display_rear_projection_mode_tab | :36 | 模式 Tab |
pk_settings_display_rear_projection_child_lock | :37 | 童锁开关 |
四、strings 清单(以 values-zh-rCN/strings.xml 直抄为准)
⚠️ 重要:三个模式 Tab 的 UI 文案是「收起 / 投影模式 / 屏风模式」(英文 Retract / Project / Partition,枚举
CLOSE/PROJECTION/SCREEN)。不要按枚举名或源码类注释(类注释写的是过时的”关闭/投影/投屏”)误解。本表在对抗审查后发现早期 Agent 转述的文案多处不准,故全部以 strings.xml 真实值为准。
name(settings_display_rear_projection_*) | 中文真实文案(values-zh-rCN) | 行号 |
|---|---|---|
category | 后排投影 | 142 |
mode_title | 投影模式 | 143 |
mode_close | 收起 | 144 |
mode_projection | 投影模式 | 145 |
mode_screen | 屏风模式 | 146 |
child_lock | 后排投影童锁 | 147 |
child_lock_summary | 开启后,后排投影控制将被锁定 | 148 |
dialog_title | 后排投影模式 | 149 |
dialog_description | 投影模式:展开后排投影幕布并开启投影,提供后排娱乐与影音内容。\n\n屏风模式:展开幕布但关闭投影,形成前后排隔断以保障后排隐私。 | 150 |
disable_reason_system_failure | 投影系统故障,请联系线上服务中心 | 151 |
disable_reason_bed_board_fold | 二层床板已升起,请放下床板后再使用 | 152 |
disable_reason_space_not_enough | 空间不足,暂时无法使用 | 153 |
adjusting | 正在调节后排投影幕布 | 154 |
anti_collision_or_anti_pinch | 幕布运动受阻,请检查是否有障碍物后再试 | 155 |
seat_linkage_failed | 座椅调整失败,请稍后再试 | 156 |
「投影模式」与「屏风模式」的区别(来自 dialog 描述):投影模式=展开幕布+开启投影(后排娱乐与影音);屏风模式=展开幕布但关闭投影(形成前后排隔断,保障后排隐私)。
多语言已覆盖:values/(默认英 Retract/Project/Partition)、values-de/、values-en-rGB/、values-es/、values-fr/、values-it/、values-nl/、values-sv/、values-nb/、values-zh-rCN/。
五、资源清单
5.1 Drawable
| 资源 | 路径 | 用途 |
|---|---|---|
micar_rear_projection_close | settingsPage/micarDisplaySettings/.../drawable/ | 收起模式图 |
micar_rear_projection_mode | 同上 | 投影模式图 |
micar_rear_projection_screen | 同上 | 屏风模式图 |
micar_rear_projection_bg | drawable/ + drawable-night/ | Tab 背景(分日/夜) |
micar_ic_exclamation_point | base/settingsBaseUi/.../drawable/ | 标题说明图标 |
5.2 Dimen
| 资源 | 值 | 路径 |
|---|---|---|
micar_basic_dp_156 | 156dp | base/settingsBaseUi/.../values/dimens_basic.xml |
用于 RearProjectionModeTabController.kt:34 设置 Tab 图片高度。