换装第一步:主题改的是什么

纯黑背景看久了,难免想给家里的大电视换换气。CleanYourTV 的答案是「主题」:不改代码、不重新构建,只靠推送一份配置,就能把首页的背景、壁纸和布局换成另一副模样。

主题机制有三个关键词,先记住它们:

  • 21 套:项目仓库随附 21 套主题(含内置的 default 默认主题),开箱即有得选。
  • config.json:一套主题就是一份 config.json 配置,规定背景、壁纸、布局长什么样。
  • Wi-Fi 推送:主题通过 Wi-Fi 从电脑推送到电视,无需重新构建,无需数据线。

也就是说,换主题的成本低到「喝口水的时间」——挑一套、推过去、看一眼。不喜欢,推回 default 就好。下面按「怎么挑、怎么推、怎么收场」的顺序讲。

21 套主题:从 default 开始逛

21 是个适合慢慢逛的数字。建议的尝鲜顺序:

  1. 先用 default:内置默认主题就是你安装后见到的样子,纯黑背景、原版布局。把它作为「原点」,之后每换一套,都和它对比,才知道自己喜欢的是哪一口。
  2. 再挑风格接近的:有的主题只微调背景色或壁纸,和 default 差别小,适合作为第一步试探。
  3. 最后试反差大的:布局变化明显、视觉风格强烈的那几套,喜欢的人很惊喜,无感的人推回 default 也只花一分钟。

挑选时只有一个判断标准:坐在沙发上远看三秒,舒不舒服。主题是氛围件,不是参数件,没有「哪套最好」,只有「你家客厅适合哪套」。

换主题不需要挑黄道吉日,但建议挑一个「接下来半小时没人看电视」的时段:推送、加载、环视客厅、叫家人过来看一眼,满意就留下,不满意当场换。21 套主题的意义不在于一次试完,而在于你随时拥有「不满意就换」的底气——这套机制把「电视长什么样」从厂商的发布会,变成了你家的家务事。

推送机制:一份 config.json 的旅行

换主题的技术动作,本质上是把一份 config.json 从电脑送到电视,让首页按新配置重新打扮自己。流程与第 4 章的工具链一脉相承:

flowchart LR
    A[电脑 themes/ 目录挑主题] --> B[生成/确认该主题的 config.json]
    B --> C[经 Wi-Fi 推送到电视]
    C --> D[首页加载新配置]
    D -->|背景/壁纸/布局焕然一新| E[日常使用]
    E -->|想再换| A

项目为此提供了专用工具 tools/theme.sh,主题文件则统一放在仓库的 themes/ 目录下。对普通用户,理解到这个程度就够了:主题在电脑侧的 themes/ 里,推送到电视的是一份 config.json,推送用的是随项目提供的工具,不需要自己拼命令。

有三个值得知道的事实:

  • 无需重新构建。这是主题机制对用户最友好的一点:它不是刷机,不会动系统,也不影响你已经做过的禁用与隐藏。
  • 改动可逆。任何时候推送 default 的配置,首页即回到初始模样。
  • 和 config.xml 各管各的。上一篇讲的 config.xml 管行为(dock、行列数、隐藏清单),主题的 config.json 管外观(背景、壁纸、布局),互不打架。

模块卡片:应用把功能「递」到首页

主题解决「首页长什么样」,模块卡片解决「首页上还有什么」。

所谓模块卡片(module cards),是这样一个机制:任何电视应用都可以申请在首页提供一个磁贴。这个磁贴不一定只是「点开我」,它可以把应用的某个功能、某个状态直接呈现到首页——比如显示待续播的内容、显示当前的天气。是否授权,完全由用户逐项决定:应用提交申请,你在电视上确认,它才出现在首页。

模块卡片的授权逻辑值得多说两句,因为它关系到你的电视干不干净:

环节 谁决定 说明
应用申请提供磁贴 应用方 应用主动声明「我能提供一块卡片」
是否授权 用户 逐项确认,不想要的不给
卡片出现在首页 用户授权后 出现在网格,参与常规聚焦操作

「逐项授权」这四个字是关键:没有任何应用能未经同意就往你的首页塞东西。这与你过去经历的「预装首页自己往桌面塞推广」正好相反——在这里,首页内容的主权在用户手里。授权也不是一锤子买卖:当初同意过的卡片,后来反悔了,可以再次进入授权管理把它撤下,磁贴随即从首页消失,而应用本身照常保留。定期去授权列表里看一眼,撤掉那些当初手滑同意、如今已无感的卡片,是保持首页清爽的好习惯。

什么样的应用适合用模块卡片?一个简单的判断标准:它有没有一个你希望「不打开应用也能看到」的状态。有,就值得授权一块卡片;没有,传统的「点开我」磁贴就够了,不必为了上首页而上首页。

add-ons:可选模块的安身之处

社区和厂商会为 CleanYourTV 提供一些可选的附加应用(add-ons),它们以模块卡片的形式接入首页,放在仓库的 addons/ 目录。这里有一个对系统稳定性很重要的设计:add-ons 不编入 launcher。

「不编入 launcher」意味着:launcher 本体保持独立和精简,附加功能是外挂式接入。装与不装、装哪几个,都由你决定;某一款 add-on 出了问题,也不会连带 launcher 本身。对用户的实操建议:

  1. 先只装「明确解决我某个痛点」的 add-ons,别把 add-ons 当成必装集。
  2. 新装的 add-on 先在首页用几天,确认稳定再长期保留。
  3. 长时间不用的,移除即可——模块卡片随授权管理走,首页不会留下残骸。

时钟屏保:让时钟慢慢散步

电视屏幕有一个物理宿命:烧屏。长时间静止的高对比画面,会在面板上留下难以消退的残影。新首页自带的时钟屏保(Clock screensaver)就是为此准备的:进入屏保后,屏幕上显示时钟,而时钟并非钉在一个位置——它在一层光晕之上缓慢漂移,画面持续轻微位移,避免同一像素点长期点亮。

使用上有三个细节:

  • 进入条件:电视闲置达到系统设定的屏保时间后自动进入,无需手动操作。
  • ** motion 很轻**:漂移速度刻意放慢,既能防烧屏,又不会在客厅里形成扰人的亮影。
  • 退出方式:按任意遥控键即可唤回,回到首页或回到你之前的界面。

把它和 reduced motion 区分开:reduced motion 收敛的是首页操作界面的动效,时钟屏保是闲置时的独立功能,两者互不影响。担心动画敏感的用户,可以首页动效减弱、时钟屏保照常开着,防烧屏不耽误。

速查与提醒

想做的事 怎么做 注意
换主题 在 themes/ 里挑,推送对应 config.json 21 套含 default,可随时换回
推主题工具 tools/theme.sh 无需重新构建
恢复原样 推送 default 主题配置 一分钟内还原
让应用上首页 应用申请模块卡片,用户逐项授权 不授权不上首页
装附加功能 addons/ 目录下的可选应用 不编入 launcher,可随时移除
防烧屏 保持时钟屏保开启 时钟缓漂,闲置自动进入

最后提醒两条:其一,主题和 add-ons 都属于「外观与可选功能层」,折腾它们不影响系统底层,放心试;其二,每次只推一套主题、只装一个 add-on,出问题时才定位得动。下一篇讲 App 资源库与磁贴菜单——那些被你藏起来、收起来的应用,怎么一次找回来。