章节摘要:界面的"长相"不该散落在每个 XML 里。本章认识 res 资源目录的组织法则,走完从 Style 到 Theme 的复用阶梯,再把颜色与尺寸资源化统一管理。猜数字 App 在本章从"能用"升级为"有品",也学会夜间模式与多主题的钥匙。
功能齐了、事件通了,但 App 还是"系统默认款":按钮一个灰、标题一个黑,改个主色要全文搜索替换十几处。化妆的第一步不是挑口红,是建化妆台——res 目录下 drawable、values、mipmap 各有编制,资源该进哪个抽屉有硬规矩;第二步把重复的属性收拢成 Style,一处定义处处引用;第三步发现 Style 只管单个控件,整套界面的底色氛围需要 Theme 出场;最后把颜色数字、尺寸魔法数请出代码,请进 colors.xml 与 dimens.xml。四步走完,换主题、适配夜间模式、统一改版,都从"全文件大搜捕"变成"改一处"。
本章的认知升级有两级。第一级在 6.2:Style 与 Theme 是同一个东西的两种用法——都是属性键值集合,作用在控件上是 Style,作用在 Activity 或 Application 上下文上是 Theme;分清"引用一个样式"与"声明一个主题"就不会在两个 XML 里迷路。第二级在 6.3:颜色命名要描述用途而不是描述色值——colorPrimary 是好名字,colorBlue500 是坏名字,因为主题换成红色系那天,坏名字会变成谎言。这两个命名观贯穿所有资源化实践。
从属性散落到处处复用的阶梯:
单屏 App 到此已是成品,但真实应用要多页面、多场景。第 7 章进入模式车间:对话框、Toolbar 应用栏与列表神器 RecyclerView,把散装技能组装成通用界面模式。
可考核条目包括:说出 res 各子目录职责与三句组织法则、解释资源 id 的编译期检查与命名禁令、写出带 parent 的 Style 并在控件上引用、区分 Style 与 Theme 并说明 ?attr 引用的间接性、用 ContextThemeWrapper 实现 overlay 局部变体、配置 values-night 实现夜间换肤、按用途语义化命名颜色、用 4 的倍数组织间距令牌、判断一个数值该不该提升为令牌。综合自查:给现有项目做一次"令牌化审计"——列出所有硬编码颜色与尺寸,各挑三个改造成资源引用,改完再切换一次深色模式看效果。走完这一遍,"长相"在你的项目里就再也不是散养的了。