<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: goodlords</title>
    <description>The latest articles on DEV Community by goodlords (@zealot2002).</description>
    <link>https://dev.to/zealot2002</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3939247%2F9f37a317-a504-4090-9ddd-7305f6de5be2.jpeg</url>
      <title>DEV Community: goodlords</title>
      <link>https://dev.to/zealot2002</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zealot2002"/>
    <language>en</language>
    <item>
      <title>Modern UI Architecture (Part 4): Design Ownership and Team Rollout</title>
      <dc:creator>goodlords</dc:creator>
      <pubDate>Tue, 19 May 2026 05:24:06 +0000</pubDate>
      <link>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-zong-jie-she-ji-zhu-quan-hui-gui-yu-tuan-dui-luo-di-5h5j</link>
      <guid>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-zong-jie-she-ji-zhu-quan-hui-gui-yu-tuan-dui-luo-di-5h5j</guid>
      <description>&lt;h1&gt;
  
  
  现代化 UI 架构总结：设计主权回归与团队落地
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;本文是 UI 架构系列的第四篇，也是最后一篇。建议先阅读 &lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo"&gt;第一篇：三层颜色体系与系统化设计方案&lt;/a&gt;、&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-drawable-ceng-gui-fan-yu-gong-cheng-shi-jian-16km"&gt;第二篇：Drawable 层规范与工程实践&lt;/a&gt;、&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-style-ceng-ru-he-xi-tong-xing-xiao-chu-dai-ma-rong-yu-4nmb"&gt;第三篇：Style 层如何系统性消除代码冗余&lt;/a&gt; 了解完整架构体系。&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  一、架构全景：
&lt;/h2&gt;

&lt;p&gt;在前面三篇文章中，我们构建了一套完整的 UI 资源架构体系：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdzdapaozd6p6y7n0mjv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdzdapaozd6p6y7n0mjv.png" alt=" " width="702" height="1836"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 架构的核心价值
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;层级&lt;/th&gt;
&lt;th&gt;核心价值&lt;/th&gt;
&lt;th&gt;解决的问题&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Style&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;消除冗余，提升复用&lt;/td&gt;
&lt;td&gt;重复属性定义&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Drawable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;统一形态，状态管理&lt;/td&gt;
&lt;td&gt;视觉不一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Func_&lt;/strong&gt;*&lt;/td&gt;
&lt;td&gt;语义抽象，职能归一&lt;/td&gt;
&lt;td&gt;颜色滥用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;基础色+主题&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主题切换，灵活适配&lt;/td&gt;
&lt;td&gt;多模式支持&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.2 Demo 的局限性
&lt;/h3&gt;

&lt;p&gt;需要说明的是，本仓库中的 demo 仅作为&lt;strong&gt;抛砖引玉&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;颜色覆盖&lt;/strong&gt;：只实现了常用 token 子集；矩阵补全、新增档位均由&lt;strong&gt;设计师&lt;/strong&gt;在资源文件中维护，研发不自行扩展&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drawable 资源&lt;/strong&gt;：仅实现了按钮、输入框等基础组件的状态，实际项目会更复杂&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;组件覆盖&lt;/strong&gt;：demo 覆盖常用 token 子集（表面层级、填充/渐变、按钮形态与禁用态等），列表、弹窗等复杂场景仍需按产品扩展&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.3 Demo 运行效果（日间 / 夜间）
&lt;/h3&gt;

&lt;p&gt;仓库内置 &lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/layout/activity_token_showcase.xml" rel="noopener noreferrer"&gt;&lt;strong&gt;Token 样例&lt;/strong&gt;&lt;/a&gt; 页（&lt;code&gt;activity_token_showcase&lt;/code&gt;），用于对照资源命名与真机效果：右上角切换深浅色后，&lt;strong&gt;同一套&lt;/strong&gt; &lt;code&gt;func_*&lt;/code&gt; / Drawable / Style &lt;strong&gt;无需改代码&lt;/strong&gt;，仅由 &lt;code&gt;values-night&lt;/code&gt; 中 &lt;code&gt;t_*&lt;/code&gt; 映射驱动换肤。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;日间&lt;/th&gt;
&lt;th&gt;夜间&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9guqj0p87qyurh34kkvm.png" alt="日间 Token 样例" width="800" height="1787"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvidm5sxdywk04kr526q1.png" alt="夜间 Token 样例" width="800" height="1787"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;GitHub 预览（可点击查看原图）：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;日间：&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/screenshot/day.png" rel="noopener noreferrer"&gt;screenshot/day.png&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;夜间：&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/screenshot/night.png" rel="noopener noreferrer"&gt;screenshot/night.png&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;左：&lt;code&gt;values&lt;/code&gt; 日间映射；右：&lt;code&gt;values-night&lt;/code&gt; 覆写 `t_&lt;/em&gt;` 后的同一页面。*&lt;/p&gt;

&lt;p&gt;这套架构的真正价值在于&lt;strong&gt;方法论&lt;/strong&gt;，而非具体实现。&lt;/p&gt;




&lt;h2&gt;
  
  
  二、深度思考：UI 架构的权力究竟属于谁？
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 一个尖锐的问题
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;UI 架构的权力究竟属于设计师还是属于程序员？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;这个问题困扰了无数团队。让我们从几个角度分析：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;角色&lt;/th&gt;
&lt;th&gt;优势&lt;/th&gt;
&lt;th&gt;劣势&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;顶尖设计师&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;具备专业视觉素养，理解设计语言，追求极致细节&lt;/td&gt;
&lt;td&gt;对技术实现边界不了解，难以落地&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;程序员&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;懂技术实现，能落地，但良莠不齐&lt;/td&gt;
&lt;td&gt;缺乏设计专业训练，视觉敏感度不足&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2.2 现实的困境
&lt;/h3&gt;

&lt;p&gt;在大多数公司，现状是：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;设计师设计稿&lt;/strong&gt; → 精心设计的颜色、间距、阴影&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;研发实现&lt;/strong&gt; → 代码实现时可能随意选择颜色、调整尺寸&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;反复 UI 走查&lt;/strong&gt; → 发现偏差，返工修改&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;再次走查&lt;/strong&gt; → 仍有偏差，继续返工&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;这是一个巨大的资源浪费循环。&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 浪费有多大？
&lt;/h3&gt;

&lt;p&gt;根据我在多个中等规模项目中的经验，常见情况是：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;单次 UI 走查&lt;/strong&gt;：往往能发现数十处视觉偏差（色值、字号、间距不一致）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;走查轮次&lt;/strong&gt;：往往要 3–5 轮才能收敛&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;每轮修复&lt;/strong&gt;：往往占用 1–2 人天研发 + 设计师复核时间&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;叠加产品经理协调、测试回归、上线推迟，&lt;strong&gt;单个项目就会白白消耗数人天到数十人天&lt;/strong&gt;。团队项目一多，这就是持续燃烧的隐性成本。&lt;/p&gt;




&lt;h2&gt;
  
  
  三、解决方案：将定义权交还给设计师
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 架构的使命
&lt;/h3&gt;

&lt;p&gt;这套 UI 架构体系的深层使命，是&lt;strong&gt;将 UI 的定义权从程序员手中重新夺回到设计师手中&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;核心思路&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;设计语言标准化&lt;/strong&gt;：由设计总监定义完整的设计语言&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资源文件可配置化&lt;/strong&gt;：将设计决策转化为可配置的资源文件（&lt;strong&gt;所有权在设计侧&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;代码引用规范化&lt;/strong&gt;：程序员只引用已有 token 与 Style，&lt;strong&gt;无权&lt;/strong&gt;自行定义颜色、字号、圆角档位或新增 Style 变体&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3.2 设计师主导的工作流
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7kon58snere3a9xo70p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7kon58snere3a9xo70p.png" alt=" " width="800" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;具体实现&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设计阶段&lt;/strong&gt;：设计总监定义设计语言&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;颜色体系（7大色系 × 6种职能）&lt;/li&gt;
&lt;li&gt;文字规范（字号、字重、行高）&lt;/li&gt;
&lt;li&gt;间距系统（8dp 栅格）&lt;/li&gt;
&lt;li&gt;组件规范（按钮、卡片、输入框）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置阶段&lt;/strong&gt;：将设计语言转化为资源文件&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;colors_primitives.xml&lt;/code&gt;：基础色定义&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;colors_theme_tokens.xml&lt;/code&gt;：主题映射&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;colors_semantic.xml&lt;/code&gt;：功能色定义&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;styles_tv.xml&lt;/code&gt;：文字样式&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;styles_button.xml&lt;/code&gt;：按钮样式&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;drawable/*&lt;/code&gt;：状态选择器&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;开发阶段&lt;/strong&gt;：程序员只需引用&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"@style/tv_black_1_size_15"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"@style/Btn.Orange.Capsule.Emphasis"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.3 权力回归的意义
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;设计师主导&lt;/th&gt;
&lt;th&gt;程序员主导&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;视觉一致性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;高度一致，符合设计语言&lt;/td&gt;
&lt;td&gt;参差不齐，取决于个人水平&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;设计还原度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100% 还原设计意图&lt;/td&gt;
&lt;td&gt;60-90%，取决于专业能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;迭代效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;改资源文件即可，无需改代码&lt;/td&gt;
&lt;td&gt;需要修改大量代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;维护成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;低，集中管理&lt;/td&gt;
&lt;td&gt;高，分散在各处&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  四、统一架构带来的深远影响
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 世界级的产品外观
&lt;/h3&gt;

&lt;p&gt;统一的 UI 架构带来的是&lt;strong&gt;世界级的产品外观设计和视觉一致性&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;举个例子：同样是"灰色"，细微的差异就会导致 App 的品质感天差地别：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;设计稿：gray_2 = #8A8A8A（精心调配的中性灰）
错误实现：gray = #888888（随手写的灰色）
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;这 0.5% 的差异，在用户眼中就是"专业"和"山寨"的区别。&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 团队协作效率提升
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;场景对比&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;传统方式&lt;/th&gt;
&lt;th&gt;架构方式&lt;/th&gt;
&lt;th&gt;效率提升&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;新增页面&lt;/td&gt;
&lt;td&gt;手动写所有属性&lt;/td&gt;
&lt;td&gt;引用 style，一行搞定&lt;/td&gt;
&lt;td&gt;80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;修改主题色&lt;/td&gt;
&lt;td&gt;修改所有布局文件&lt;/td&gt;
&lt;td&gt;修改一处资源&lt;/td&gt;
&lt;td&gt;99%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI 走查修复&lt;/td&gt;
&lt;td&gt;查找并修改多处&lt;/td&gt;
&lt;td&gt;资源已定义，无需修改&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4.3 品牌形象的统一
&lt;/h3&gt;

&lt;p&gt;在多端、多产品线的场景下，统一架构的价值更加凸显：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Android/iOS/Web&lt;/strong&gt;：使用相同的颜色定义&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;主 App/小程序/H5&lt;/strong&gt;：保持一致的视觉风格&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;不同版本&lt;/strong&gt;：确保品牌形象的连续性&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  五、架构落地的实践建议
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 渐进式落地策略
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdd3de9cywc3zz2tdprk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdd3de9cywc3zz2tdprk.png" alt=" " width="434" height="860"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 团队协作规范
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;设计规范先行：设计总监必须先定义设计语言&lt;/li&gt;
&lt;li&gt;资源配置同步：所有颜色/字号/Style/Drawable 变更仅由设计侧提交资源 PR&lt;/li&gt;
&lt;li&gt;代码审查把关：研发 PR 禁止硬编码颜色、尺寸，禁止新增 &lt;code&gt;func_*&lt;/code&gt; / &lt;code&gt;tv_*&lt;/code&gt; / &lt;code&gt;Btn.*&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;定期审计：CI 门禁 + 设计走查，发现违规引用一律打回&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.3 工具链支持
&lt;/h3&gt;

&lt;p&gt;建议配套以下工具：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;设计稿标注工具&lt;/strong&gt;：Zeplin、Figma 插件&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资源生成工具&lt;/strong&gt;：自动从设计稿生成资源文件&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;代码检查工具&lt;/strong&gt;：Lint 规则检查硬编码&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;预览工具&lt;/strong&gt;：实时预览主题切换效果&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  六、系列文章回顾与总结
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 四篇文章的核心贡献
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文章&lt;/th&gt;
&lt;th&gt;核心内容&lt;/th&gt;
&lt;th&gt;解决的问题&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;第一篇&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;三层颜色体系与系统化设计方案&lt;/td&gt;
&lt;td&gt;主题切换、颜色一致性、职能 token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;第二篇&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drawable 层规范与工程实践&lt;/td&gt;
&lt;td&gt;形态定义、状态管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;第三篇&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Style 层如何系统性消除代码冗余&lt;/td&gt;
&lt;td&gt;消除冗余、提升复用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;第四篇&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;设计主权回归与团队落地&lt;/td&gt;
&lt;td&gt;权力边界、规范强制执行&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6.2 架构的核心原则
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;分层抽象&lt;/strong&gt;：从基础色到组件，逐层抽象&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;语义化命名&lt;/strong&gt;：让资源名表达用途，而非具体值&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;正交组合&lt;/strong&gt;：属性分离，灵活组合&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;集中管理&lt;/strong&gt;：资源集中定义，便于维护&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6.3 最终价值
&lt;/h3&gt;

&lt;p&gt;这套架构体系带来的价值是&lt;strong&gt;系统性的&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;对用户&lt;/strong&gt;：更一致、更专业的产品体验&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;对设计师&lt;/strong&gt;：设计意图得到完整还原&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;对程序员&lt;/strong&gt;：减少重复劳动，提升开发效率&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;对公司&lt;/strong&gt;：节省大量人力成本，提升品牌形象&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  七、跨平台适用性与 AI 时代的设计交付
&lt;/h2&gt;

&lt;p&gt;需要强调的是，这套 UI 架构虽然以 Android 作为例子说明，但&lt;strong&gt;核心思想可以完全平移到 iOS、React、H5、小程序等任何平台&lt;/strong&gt;。架构的本质是"设计语言的工程化表达"，与具体实现技术无关。&lt;/p&gt;

&lt;p&gt;在 AI 大模型的帮助下，设计师可以交付完整的一套 UI 架构。这套架构是 &lt;strong&gt;AI 友好的&lt;/strong&gt;——通过合理的 Prompt、设计规范与资源清单，能够快速沉淀全平台统一的设计语言。&lt;/p&gt;

&lt;p&gt;最重要的一点：&lt;strong&gt;程序员没有权力定义颜色、样式、字号、按钮，也没有权力「扩展档位」或私自新增 token&lt;/strong&gt;。需要新色、新字号、新 Style 时，必须回到设计师维护的资源文件（本体系中的 &lt;code&gt;colors_*.xml&lt;/code&gt;、&lt;code&gt;styles_*.xml&lt;/code&gt;、&lt;code&gt;drawable/&lt;/code&gt;）由设计侧变更，再合入工程。程序员的职责只有一项：&lt;strong&gt;严格引用设计师已发布的资源&lt;/strong&gt;，确保设计意图完整落地。&lt;/p&gt;




&lt;h2&gt;
  
  
  八、规范门禁：让权力回归不只停留在纸面上
&lt;/h2&gt;

&lt;p&gt;架构写得再漂亮，若缺少&lt;strong&gt;可执行的约束&lt;/strong&gt;，仍会回到「谁写页面谁说了算」的老路。所谓门禁，并不是为难研发，而是把前文所说的&lt;strong&gt;设计主权&lt;/strong&gt;固化进团队的日常流程：该谁定的已经定好，研发只做引用与实现。&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 建议守住的四条底线
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;颜色只能来自设计 token&lt;/strong&gt;：页面里不应出现随手写的色值，也不应绕过功能色层去碰主题层、基础色。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;文字与按钮必须走设计样式&lt;/strong&gt;：字号、字色、按钮形态等，应在设计侧资源中选型，而不是在页面里临时拼凑。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;禁止重复定义已规范化的属性&lt;/strong&gt;：同一类控件的表现，应通过样式体系统一，避免「这个页面特殊、那个页面例外」。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;变更入口唯一在设计侧&lt;/strong&gt;：需要新色、新档位、新样式时，由设计师更新资源与规范，研发提需求、不自行扩库。&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  8.2 如何落地
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;合并前审查&lt;/strong&gt;：把 UI 资源是否符合规范，纳入 Code Review 的固定项；关键版本可由设计同学参与走查或签字。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;设计资源即唯一真相&lt;/strong&gt;：颜色、样式、Drawable 等集中由设计维护的资源包发布，业务工程只依赖已发布版本，避免各端各写一套。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自动化作为兜底&lt;/strong&gt;：团队可按需要配置静态检查或流水线卡点，但目的始终是&lt;strong&gt;拦截越权定义&lt;/strong&gt;，而不是堆砌技术细节。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;违规即打回&lt;/strong&gt;：一旦在页面里发现临时色、临时字号、临时按钮样式，应退回并要求回到设计 token 与样式体系，而不是在评审会上「差不多就行」。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.3 门禁真正要达成的效果
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;设计师的权威性&lt;/strong&gt;：视觉语言由设计定义，研发不再充当「第二设计师」。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;规范的刚性&lt;/strong&gt;：越权改动进不了主干，减少靠人记、靠自觉的侥幸。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;产品的一致性&lt;/strong&gt;：用户在不同页面、不同版本里，看到的是同一套品牌与品质感。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;门禁不是冷冰冰的流程，而是对前文「权力回归」的&lt;strong&gt;制度保障&lt;/strong&gt;。当设计与研发都认同这套边界，UI 走查才会从「找茬大战」变成「按图验收」。&lt;/p&gt;




&lt;h2&gt;
  
  
  九、结语
&lt;/h2&gt;

&lt;p&gt;UI 架构不是简单的"颜色配置"，而是&lt;strong&gt;设计语言的工程化落地&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;它解决的核心问题是：&lt;strong&gt;如何让设计师的专业决策能够在代码中完整、一致地体现&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;在这个过程中，程序员的角色从「视觉决策者」转变为「实现执行者」：&lt;strong&gt;颜色、字号、样式、按钮形态的定义权完全在设计侧&lt;/strong&gt;；程序员的价值体现在正确引用资源、业务逻辑与性能优化——而不是在布局里「顺手改个色」。&lt;/p&gt;

&lt;h2&gt;
  
  
  希望这套架构体系能够为你的团队带来启发，让我们一起构建更好的产品体验。
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;系列文章回顾&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo"&gt;第一篇：三层颜色体系与系统化设计方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-drawable-ceng-gui-fan-yu-gong-cheng-shi-jian-16km"&gt;第二篇：Drawable 层规范与工程实践&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-style-ceng-ru-he-xi-tong-xing-xiao-chu-dai-ma-rong-yu-4nmb"&gt;第三篇：Style 层如何系统性消除代码冗余&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第四篇：设计主权回归与团队落地（本文）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;参考代码&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec" rel="noopener noreferrer"&gt;完整实现仓库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 如果这套架构对你有帮助，欢迎点赞、收藏、转发。关注我，获取更多Android架构设计干货。&lt;/p&gt;
&lt;/blockquote&gt;




</description>
      <category>android</category>
      <category>architecture</category>
      <category>mobile</category>
      <category>ui</category>
    </item>
    <item>
      <title>Modern UI Architecture (Part 3): The Style Layer and Eliminating Redundancy</title>
      <dc:creator>goodlords</dc:creator>
      <pubDate>Tue, 19 May 2026 05:16:54 +0000</pubDate>
      <link>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-style-ceng-ru-he-xi-tong-xing-xiao-chu-dai-ma-rong-yu-4nmb</link>
      <guid>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-style-ceng-ru-he-xi-tong-xing-xiao-chu-dai-ma-rong-yu-4nmb</guid>
      <description>&lt;h1&gt;
  
  
  现代化 UI 架构：Style 层如何系统性消除代码冗余
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;本文是 UI 架构系列的第三篇，建议先阅读 &lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo"&gt;第一篇：三层颜色体系与系统化设计方案&lt;/a&gt;、&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-drawable-ceng-gui-fan-yu-gong-cheng-shi-jian-16km"&gt;第二篇：Drawable 层规范与工程实践&lt;/a&gt; 了解核心设计理念。&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  前言
&lt;/h2&gt;

&lt;p&gt;在多年的 Android 开发实践中，我发现一个普遍存在的问题：&lt;strong&gt;TextView 的属性定义存在大量重复&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;打开任何一个中等规模的 Android 项目，你会发现几乎每个布局文件中都有类似这样的代码：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_height=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:textColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/black"&lt;/span&gt;
    &lt;span class="na"&gt;android:textSize=&lt;/span&gt;&lt;span class="s"&gt;"15sp"&lt;/span&gt;
    &lt;span class="na"&gt;android:includeFontPadding=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"商品名称"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;这些属性被重复定义了成千上万次。想象一下：如果你有 500 个 TextView，有一天设计师说所有文字的字号要统一从 15sp 改成 16sp，或者要关闭字体内边距，你需要打开 500 个文件逐个修改——这简直是噩梦。&lt;/p&gt;

&lt;p&gt;我们分析了大量项目中的 TextView 使用情况，遵从 98% 的 TextView 的共性，提炼出 &lt;strong&gt;3 个&lt;/strong&gt;必须封装进 &lt;code&gt;tv_base&lt;/code&gt; 的基础属性（宽高、&lt;code&gt;includeFontPadding&lt;/code&gt;）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Style 层的核心价值&lt;/strong&gt;：由设计师在 &lt;code&gt;styles_tv.xml&lt;/code&gt;、&lt;code&gt;styles_button.xml&lt;/code&gt; 中定义文字与按钮的&lt;strong&gt;职能化&lt;/strong&gt;样式，研发在布局里只引用 &lt;code&gt;tv_*&lt;/code&gt;、&lt;code&gt;Btn.*&lt;/code&gt;，不再自行决定 &lt;code&gt;textColor&lt;/code&gt; / &lt;code&gt;textSize&lt;/code&gt; / 按钮形态。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;职能 ≠ 业务（系列铁律）&lt;/strong&gt;：&lt;code&gt;tv_black_1_size_15&lt;/code&gt;、&lt;code&gt;Btn.Orange.Capsule.Emphasis&lt;/code&gt; 命名的是&lt;strong&gt;色系 + 文本层级 / 按钮形态 + 交互档位&lt;/strong&gt;等 UI 职能，不是「商品标题」「下单支付」等业务场景。业务只决定&lt;strong&gt;在哪个页面引用哪条职能样式&lt;/strong&gt;，不应反过来用业务名定义 Style——否则全公司都会陷入「每个页面一套按钮 Style、改主题改到崩溃」的通病。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;跨平台&lt;/strong&gt;：&lt;code&gt;tv_*&lt;/code&gt; / &lt;code&gt;Btn.*&lt;/code&gt; 对应 iOS 的 &lt;code&gt;UIFont&lt;/code&gt;+语义色组合、Web 的 typography utility class；同样应由设计系统维护，研发只引用。&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  一、工程实践中的痛点：TextView 属性冗余
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 统计数据：一个中等项目的属性重复情况
&lt;/h3&gt;

&lt;p&gt;根据我们对多个项目的分析，一个包含 100 个 Activity/Fragment 的项目：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;平均每个布局文件有 5-10 个 TextView&lt;/li&gt;
&lt;li&gt;每个 TextView 平均定义 3-5 个重复属性&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;总重复次数超过 2000 次&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.2 典型的重复模式
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 模式1：每个 TextView 都重复写宽高 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 模式2：每个 TextView 都要设置 includeFontPadding --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:includeFontPadding=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:includeFontPadding=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:includeFontPadding=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 模式3：颜色和字号的组合重复 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:textColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/black"&lt;/span&gt; &lt;span class="na"&gt;android:textSize=&lt;/span&gt;&lt;span class="s"&gt;"15sp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:textColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/black"&lt;/span&gt; &lt;span class="na"&gt;android:textSize=&lt;/span&gt;&lt;span class="s"&gt;"15sp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt; &lt;span class="na"&gt;android:textColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/black"&lt;/span&gt; &lt;span class="na"&gt;android:textSize=&lt;/span&gt;&lt;span class="s"&gt;"15sp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.3 维护成本分析
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;无 Style&lt;/th&gt;
&lt;th&gt;有 Style&lt;/th&gt;
&lt;th&gt;节省比例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;修改默认宽高&lt;/td&gt;
&lt;td&gt;需要修改所有文件&lt;/td&gt;
&lt;td&gt;修改一处&lt;/td&gt;
&lt;td&gt;~99%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;修改 includeFontPadding&lt;/td&gt;
&lt;td&gt;需要修改所有文件&lt;/td&gt;
&lt;td&gt;修改一处&lt;/td&gt;
&lt;td&gt;~99%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;修改字号&lt;/td&gt;
&lt;td&gt;需要修改所有文件&lt;/td&gt;
&lt;td&gt;修改一处&lt;/td&gt;
&lt;td&gt;~99%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;修改颜色主题&lt;/td&gt;
&lt;td&gt;需要修改所有文件&lt;/td&gt;
&lt;td&gt;修改一处&lt;/td&gt;
&lt;td&gt;~99%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  二、经验总结：TextView 必须的 3 个基础属性
&lt;/h2&gt;

&lt;p&gt;经过多个大型项目的实践验证，我们总结出 &lt;strong&gt;TextView 必须定义的 3 个基础属性&lt;/strong&gt;：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_base"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:layout_width"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;wrap_content&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:layout_height"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;wrap_content&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:includeFontPadding"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.1 为什么是这 3 个？
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;必要性&lt;/th&gt;
&lt;th&gt;工程经验&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;layout_width="wrap_content"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;95% 的 TextView 不需要撑满一行，需要时在布局中覆盖&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;layout_height="wrap_content"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文字高度应由内容决定，避免固定高度导致截断&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;includeFontPadding="false"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Android 默认字体有额外内边距，导致垂直居中困难&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2.2 为什么不再多定义一些？
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- ❌ 不推荐：在 base 中定义过多属性 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_base_bad"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:layout_width"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;wrap_content&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:layout_height"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;wrap_content&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:includeFontPadding"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/black&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;  &lt;span class="c"&gt;&amp;lt;!-- 不应该在这里定义 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;15sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;           &lt;span class="c"&gt;&amp;lt;!-- 不应该在这里定义 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;正交性原则&lt;/strong&gt;：颜色和字号是正交的属性，应该分开定义&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;组合灵活性&lt;/strong&gt;：不同场景需要不同的颜色+字号组合&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;单一职责&lt;/strong&gt;：base 只负责"通用基础属性"，不负责"业务属性"&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  三、正交组合：颜色 × 字号 的高效复用
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 设计思路
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frftnr5tn9x7rt7ns0d3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frftnr5tn9x7rt7ns0d3m.png" alt=" " width="552" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 色系层定义
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 黑色系（主文本） --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_base"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_black_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_2"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_base"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_black_text_2&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 灰色系（辅助文本） --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_gray_1"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_base"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_gray_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_gray_2"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_base"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_gray_text_2&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 橙色系（强调文本） --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_orange_1"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_base"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_orange_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.3 字号层定义
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 黑色主文本 + 各种字号 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1_size_12"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;12sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1_size_14"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;14sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1_size_15"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;15sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1_size_16"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_black_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;16sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 灰色辅助文本 + 常用字号 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_gray_2_size_12"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_gray_2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;12sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tv_gray_2_size_14"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"tv_gray_2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;14sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;屏幕适配优势&lt;/strong&gt;：这种集中定义的方式还有一个重要好处——便于屏幕适配。如果有一天需要支持多尺寸屏幕，只需将硬编码的 &lt;code&gt;15sp&lt;/code&gt; 修改为 &lt;code&gt;@dimen/size_15&lt;/code&gt;，然后在不同的 dimens 文件中定义不同的值即可，整个改动只需要修改 tv style 这一个文件。&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 组合效果
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;颜色层&lt;/th&gt;
&lt;th&gt;字号层&lt;/th&gt;
&lt;th&gt;组合结果&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv_black_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;size_15&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tv_black_1_size_15&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;商品标题、主要内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv_black_2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;size_13&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tv_black_2_size_13&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;副标题、次要内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv_gray_2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;size_12&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tv_gray_2_size_12&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提示文字、辅助说明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv_orange_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;size_14&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tv_orange_1_size_14&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;强调文字、按钮文字&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  四、按钮 Style：同样的思路，不同的属性
&lt;/h2&gt;

&lt;p&gt;Button Style 是「业务绑定」的重灾区。很多中大型团队的项目里，你会看到 &lt;code&gt;BtnLoginSubmit&lt;/code&gt;、&lt;code&gt;BtnOrderPay&lt;/code&gt;、&lt;code&gt;BtnMemberOpen&lt;/code&gt; 并排存在——它们往往只是胶囊主按钮的重复拷贝，圆角、字重、背景几乎一样，却&lt;strong&gt;无法复用、无法统一换肤、无法做全 App 主题&lt;/strong&gt;。这是业内极其普遍的痛点；根因同样是把 &lt;strong&gt;业务名当成了 Style 名&lt;/strong&gt;，而正确的命名只能落在 &lt;strong&gt;职能&lt;/strong&gt; 上：主操作、次操作、描边强调、小尺寸等。&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 按钮必须的基础属性
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"BaseButton"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"android:Widget.Button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;15sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textStyle"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;bold&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:letterSpacing"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;0.02&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:gravity"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;center&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:minHeight"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;48dp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:paddingLeft"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;24dp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:paddingRight"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;24dp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 按钮属性分析
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;必要性&lt;/th&gt;
&lt;th&gt;工程经验&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;textSize=15sp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按钮文字需要足够大，保证可点击性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;textStyle=bold&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按钮需要视觉强调，加粗效果更好&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;letterSpacing=0.02&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;适当增加字间距提升可读性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;minHeight=48dp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;符合 Material Design 规范，保证点击区域&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;paddingLeft/Right=24dp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;必须&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;左右内边距保证文字不贴边&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4.3 按钮的正交组合
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 胶囊按钮 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Btn.Orange.Capsule.Emphasis"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"BaseButton"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:background"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@drawable/sel_orange_interact_capsule_emphasis_default&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_white_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Btn.Gray.Capsule.Neutral"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"BaseButton"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:background"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@drawable/sel_gray_interact_capsule_neutral_default&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_black_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 小尺寸按钮 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Btn.Orange.Capsule.Small"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"BaseButton"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:minHeight"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;36dp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;13sp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:paddingLeft"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;16dp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:paddingRight"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;16dp&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:background"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@drawable/sel_orange_interact_capsule_emphasis_default&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_white_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 描边按钮 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Btn.Orange.Outline.Emphasis"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"BaseButton"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:background"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@drawable/sel_orange_interact_outline_emphasis_default&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_orange_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Btn.Orange.Capsule.Emphasis&lt;/code&gt; 表达的是&lt;strong&gt;橙色 + 胶囊形态 + 强调档位&lt;/strong&gt;，与 Drawable &lt;code&gt;sel_orange_interact_capsule_emphasis_default&lt;/code&gt; 同序（色系在前）；登录页、收银台、活动页主按钮都可引用，&lt;strong&gt;不要把业务写进 Style 名&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 反例：业务型 Button Style 如何毁掉复用
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ 错误：Style 名承载业务
Btn.Login.Submit
Btn.Order.ConfirmPay
Btn.Profile.EditSave
Btn.Cart.CheckoutNow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;看似清晰，实则每个业务线各维护一套「主按钮」，设计改一版主色或圆角，要改几十个 Style、走查几十个页面。正确做法是收敛到 &lt;code&gt;Btn.Orange.Capsule.Emphasis&lt;/code&gt;、&lt;code&gt;Btn.Gray.Capsule.Neutral&lt;/code&gt;、&lt;code&gt;Btn.Orange.Outline.Emphasis&lt;/code&gt; 等&lt;strong&gt;职能命名&lt;/strong&gt;（&lt;strong&gt;色系在形状之前&lt;/strong&gt;），与 Drawable &lt;code&gt;sel_orange_interact_capsule_emphasis_default&lt;/code&gt; 字段顺序一致。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;业务命名&lt;/th&gt;
&lt;th&gt;职能命名&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;回答的问题&lt;/td&gt;
&lt;td&gt;这是哪个页面的按钮？&lt;/td&gt;
&lt;td&gt;这是什么形态、什么强调级别的按钮？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;能否跨页面复用&lt;/td&gt;
&lt;td&gt;❌ 基本不能&lt;/td&gt;
&lt;td&gt;✅ 全 App 复用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主题/品牌升级&lt;/td&gt;
&lt;td&gt;改多处、易遗漏&lt;/td&gt;
&lt;td&gt;改 Style + token 即可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;典型名称&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BtnOrderPay&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Btn.Orange.Capsule.Emphasis&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  五、复用效果对比
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 改造前：每个 TextView 都要写完整属性
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 改造前：每个都要写 4-5 行 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_height=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:includeFontPadding=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;
    &lt;span class="na"&gt;android:textColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_black_text_1"&lt;/span&gt;
    &lt;span class="na"&gt;android:textSize=&lt;/span&gt;&lt;span class="s"&gt;"15sp"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"商品名称"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_height=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:includeFontPadding=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;
    &lt;span class="na"&gt;android:textColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_gray_text_2"&lt;/span&gt;
    &lt;span class="na"&gt;android:textSize=&lt;/span&gt;&lt;span class="s"&gt;"12sp"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"库存紧张"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_height=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:includeFontPadding=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;
    &lt;span class="na"&gt;android:textColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_red_text_1"&lt;/span&gt;
    &lt;span class="na"&gt;android:textSize=&lt;/span&gt;&lt;span class="s"&gt;"14sp"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"¥299"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 改造后：一行解决
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 改造后：只需引用 style --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt;
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"@style/tv_black_1_size_15"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"商品名称"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt;
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"@style/tv_gray_2_size_12"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"库存紧张"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;TextView&lt;/span&gt;
    &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"@style/tv_red_1_size_14"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"¥299"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3 量化对比
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指标&lt;/th&gt;
&lt;th&gt;改造前&lt;/th&gt;
&lt;th&gt;改造后&lt;/th&gt;
&lt;th&gt;节省比例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;代码行数（3个TextView）&lt;/td&gt;
&lt;td&gt;15 行&lt;/td&gt;
&lt;td&gt;6 行&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;属性定义次数&lt;/td&gt;
&lt;td&gt;12 次&lt;/td&gt;
&lt;td&gt;0 次&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;维护点&lt;/td&gt;
&lt;td&gt;每个 TextView&lt;/td&gt;
&lt;td&gt;1 个 Style 文件&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  六、命名规范：让复用更直观
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 文字 Style 命名
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tv_{色系}_{档位}_size_{字号}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tv_black_1_size_15&lt;/code&gt;：黑色主文本，15sp&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tv_gray_2_size_12&lt;/code&gt;：灰色辅助文本，12sp&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tv_orange_1_size_14&lt;/code&gt;：橙色强调文本，14sp&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 按钮 Style 命名
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Btn.{色系}.{形状}.{交互档位}[.Small]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;（与 Drawable &lt;code&gt;sel_{色系}_…&lt;/code&gt; 一致，&lt;strong&gt;色系紧挨 Btn 前缀&lt;/strong&gt;）：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Btn.Orange.Capsule.Emphasis&lt;/code&gt;：橙色胶囊强调按钮&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Btn.Gray.Capsule.Neutral&lt;/code&gt;：灰色胶囊中性按钮&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Btn.Orange.Outline.Emphasis&lt;/code&gt;：橙色描边强调按钮&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Btn.Orange.Capsule.Small&lt;/code&gt;：橙色胶囊小尺寸&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.3 命名原则
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;职能语义，而非业务语义&lt;/strong&gt;：&lt;code&gt;Orange&lt;/code&gt; / &lt;code&gt;Emphasis&lt;/code&gt; / &lt;code&gt;black_1&lt;/code&gt; 描述的是色系与 UI 档位，不是订单、登录、会员等业务模块&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;层次清晰&lt;/strong&gt;：&lt;code&gt;tv_{色系}_{档位}&lt;/code&gt;；&lt;code&gt;Btn_{色系}_{形状}_{档位}&lt;/code&gt;，色系位置与颜色层、Drawable 层对齐&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;易于搜索&lt;/strong&gt;：统一前缀便于 IDE 搜索；全团队共用同一套职能 Style，而不是每人发明业务名&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  七、与颜色体系的集成
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 完整数据流
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu9ebzg792yz6n8jcez2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu9ebzg792yz6n8jcez2.png" alt=" " width="771" height="1020"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 主题切换支持
&lt;/h3&gt;

&lt;p&gt;由于 Style 通过 &lt;code&gt;@color/func_*&lt;/code&gt; 引用功能色，而功能色又通过 &lt;code&gt;@color/t_*&lt;/code&gt; 引用主题色，所以：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;日间&lt;/strong&gt;：&lt;code&gt;tv_black_1_size_15&lt;/code&gt; → &lt;code&gt;func_black_text_1&lt;/code&gt; → &lt;code&gt;t_black_8&lt;/code&gt; → &lt;code&gt;black_8&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;夜间&lt;/strong&gt;：&lt;code&gt;tv_black_1_size_15&lt;/code&gt; → &lt;code&gt;func_black_text_1&lt;/code&gt; → &lt;code&gt;t_black_8&lt;/code&gt; → &lt;code&gt;white_1&lt;/code&gt;（由 &lt;code&gt;values-night&lt;/code&gt; 中 &lt;code&gt;t_*&lt;/code&gt; 映射决定）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;无需修改任何 Style，自动适配主题&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  八、实际项目中的最佳实践
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 渐进式改造
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TB
    P1["阶段1&amp;lt;br/&amp;gt;tv_base + 常用色系&amp;lt;br/&amp;gt;1-2 天"] --&amp;gt; P2["阶段2&amp;lt;br/&amp;gt;常用字号组合&amp;lt;br/&amp;gt;1 天"]
    P2 --&amp;gt; P3["阶段3&amp;lt;br/&amp;gt;逐步替换布局重复属性"]
    P3 --&amp;gt; P4["阶段4&amp;lt;br/&amp;gt;新增 TextView 必须用 Style"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2 团队协作规范
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;所有新增 TextView 必须使用设计师定义的 &lt;code&gt;tv_*&lt;/code&gt; Style&lt;/li&gt;
&lt;li&gt;禁止在布局中直接定义 &lt;code&gt;textColor&lt;/code&gt;、&lt;code&gt;textSize&lt;/code&gt;、&lt;code&gt;includeFontPadding&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;需要新的颜色+字号组合时，由设计师在 &lt;code&gt;styles_tv.xml&lt;/code&gt; 中新增，研发提需求、不自行加 token&lt;/li&gt;
&lt;li&gt;定期审查，清理直接定义属性的代码&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  8.3 扩展原则
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;做法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;需要新字号&lt;/td&gt;
&lt;td&gt;设计师在对应色系下添加（如 &lt;code&gt;tv_black_1_size_17&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要新色系&lt;/td&gt;
&lt;td&gt;设计师先补功能色，再添加 &lt;code&gt;tv_purple_1&lt;/code&gt; 及字号组合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要特殊效果&lt;/td&gt;
&lt;td&gt;优先在设计规范中沉淀；确属个例时可在布局用 &lt;code&gt;textStyle&lt;/code&gt; 等覆盖&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  九、总结
&lt;/h2&gt;

&lt;p&gt;Style 层不是简单的"属性集合"，而是&lt;strong&gt;工程经验的沉淀和复用&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  核心价值
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;消除冗余&lt;/strong&gt;：将重复属性抽取到 Style 中，写一次用无数次&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;统一标准&lt;/strong&gt;：通过 tv_base 确保所有 TextView 有一致的基础行为&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;降低维护成本&lt;/strong&gt;：修改一处，全局生效&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;支持主题切换&lt;/strong&gt;：与颜色体系无缝集成&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  关键设计原则
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;职能 ≠ 业务&lt;/strong&gt;：Style 只命名 UI 职能；业务场景只选择引用哪条 Style&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;最小化基础层&lt;/strong&gt;：tv_base 只定义 3 个必须属性&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;正交组合&lt;/strong&gt;：颜色和字号分开定义，灵活组合&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;按钮同样职能化&lt;/strong&gt;：&lt;code&gt;Btn.Orange.Capsule.Emphasis&lt;/code&gt; 等全 App 复用，禁止 &lt;code&gt;BtnXxxBusiness&lt;/code&gt; 式命名&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  预期收益
&lt;/h3&gt;

&lt;p&gt;根据我们的实践经验，引入 Style 层后：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;代码量减少 30-50%&lt;/strong&gt;（布局文件）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;维护时间减少 80%&lt;/strong&gt;（属性修改）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;视觉一致性提升&lt;/strong&gt;（避免手动书写错误）&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;参考代码（与本文配套的实现仓库一致）&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values/styles_tv.xml" rel="noopener noreferrer"&gt;文字样式定义&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values/styles_button.xml" rel="noopener noreferrer"&gt;按钮样式定义&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/tree/main/app/src/main/res/values" rel="noopener noreferrer"&gt;颜色资源&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 如果你觉得这篇文章对你有帮助，欢迎点赞、收藏、转发。关注我，获取更多Android架构设计干货。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;系列文章&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo"&gt;第一篇：三层颜色体系与系统化设计方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-drawable-ceng-gui-fan-yu-gong-cheng-shi-jian-16km"&gt;第二篇：Drawable 层规范与工程实践&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;第三篇：Style 层如何系统性消除代码冗余&lt;/strong&gt;（本文）&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-zong-jie-she-ji-zhu-quan-hui-gui-yu-tuan-dui-luo-di-5h5j"&gt;第四篇：设计主权回归与团队落地&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>android</category>
      <category>architecture</category>
      <category>mobile</category>
      <category>ui</category>
    </item>
    <item>
      <title>Modern UI Architecture (Part 2): Drawable Layer Conventions</title>
      <dc:creator>goodlords</dc:creator>
      <pubDate>Tue, 19 May 2026 05:14:02 +0000</pubDate>
      <link>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-drawable-ceng-gui-fan-yu-gong-cheng-shi-jian-16km</link>
      <guid>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-drawable-ceng-gui-fan-yu-gong-cheng-shi-jian-16km</guid>
      <description>&lt;h1&gt;
  
  
  现代化 UI 架构：Drawable 层规范与工程实践
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;本文是 UI 架构系列的第二篇，建议先阅读 &lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo"&gt;第一篇：三层颜色体系与系统化设计方案&lt;/a&gt; 了解核心设计理念。&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  前言
&lt;/h2&gt;

&lt;p&gt;在上一篇文章中，我们建立了一套完整的颜色体系。但颜色只是 UI 的基础，真正让 UI 活起来的是&lt;strong&gt;形态和交互&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;一个按钮不仅需要颜色，还需要：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;圆角、描边、阴影&lt;/li&gt;
&lt;li&gt;按下、禁用、选中的状态变化&lt;/li&gt;
&lt;li&gt;渐变、透明等视觉效果&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这些都需要通过 Drawable 来实现。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;贯穿 UI 架构层的一条铁律&lt;/strong&gt;：颜色、Drawable、Style 等所有资源定义，&lt;strong&gt;都不要和业务挂钩&lt;/strong&gt;；命名表达的是 &lt;strong&gt;UI 职能&lt;/strong&gt;，&lt;strong&gt;职能 ≠ 业务&lt;/strong&gt;。一旦用「登录页按钮」「订单失败红框」这类业务语义去命名或拆分资源，就等于把形态和颜色锁死在某个页面——&lt;strong&gt;可复用性会被立刻破坏&lt;/strong&gt;。Drawable 层只描述形态、色系、交互状态与档位，业务含义由使用它的页面自己承担。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;跨平台&lt;/strong&gt;：Android 的 Drawable/selector 对应 iOS 的 Asset Catalog 状态图、Web 的 design-token + CSS 状态类；命名与分层思想一致。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;本文要点&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;为什么需要 Drawable 层规范&lt;/li&gt;
&lt;li&gt;Drawable 层的三层架构设计&lt;/li&gt;
&lt;li&gt;统一的命名规范&lt;/li&gt;
&lt;li&gt;形态层和组件层的设计要点&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  一、为什么需要 Drawable 层规范？
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 反例：混乱的 Drawable 管理
&lt;/h3&gt;

&lt;p&gt;在我接触过的项目中，经常会看到这样的 Drawable 定义：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- btn_primary.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;shape&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"#FF4B00"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"24dp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- btn_primary_pressed.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;shape&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"#CC3D00"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"24dp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- btn_disabled.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;shape&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"#CCCCCC"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"24dp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 问题分析
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;问题类型&lt;/th&gt;
&lt;th&gt;具体表现&lt;/th&gt;
&lt;th&gt;影响&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;重复定义&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;每个状态都要单独定义一个文件&lt;/td&gt;
&lt;td&gt;维护成本高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;颜色硬编码&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;直接写色值，无法跟随主题切换&lt;/td&gt;
&lt;td&gt;主题适配困难&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;命名混乱&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;btn_primary&lt;/code&gt;、&lt;code&gt;button_normal&lt;/code&gt; 等命名不统一&lt;/td&gt;
&lt;td&gt;新人难以选择&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;难以维护&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;改一个圆角需要修改所有文件&lt;/td&gt;
&lt;td&gt;修改成本高&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.3 根本原因
&lt;/h3&gt;

&lt;p&gt;这些问题的本质在于：&lt;strong&gt;形态定义与颜色、状态过度耦合&lt;/strong&gt;。当一个 Drawable 文件同时承载了形状、颜色和状态逻辑时，任何改动都会变得非常困难。&lt;/p&gt;




&lt;h2&gt;
  
  
  二、Drawable 层的三层架构
&lt;/h2&gt;

&lt;p&gt;借鉴颜色体系的设计思路，我们同样采用&lt;strong&gt;三层架构&lt;/strong&gt;来管理 Drawable：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3g1edlcs8oezknilaaau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3g1edlcs8oezknilaaau.png" alt=" " width="702" height="1792"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 核心原则
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;层级&lt;/th&gt;
&lt;th&gt;职责&lt;/th&gt;
&lt;th&gt;特点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;组件层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;组合状态和形态&lt;/td&gt;
&lt;td&gt;通过 selector 引用 bg_*，实现状态切换&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;形态层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;定义圆角、描边、填充结构&lt;/td&gt;
&lt;td&gt;颜色只引用 &lt;code&gt;func_*&lt;/code&gt;，禁止硬编码色值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;颜色层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;提供颜色 token&lt;/td&gt;
&lt;td&gt;设计师维护的功能色，支持主题切换&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;与业务解耦&lt;/strong&gt;：三层都只表达「UI 语言」，不表达「业务故事」。&lt;code&gt;sel_orange_interact_capsule_emphasis_default&lt;/code&gt; 可以在下单主按钮、会员开通按钮、活动页主按钮上复用；若做成 &lt;code&gt;sel_order_submit_primary&lt;/code&gt;，换页面就要复制一套 Drawable，主题与形态也无法在全 App 统一维护。&lt;/p&gt;




&lt;h2&gt;
  
  
  三、命名规范：让每个文件都有明确的含义
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 命名公式
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{类型}_{色系}_{用途}_{状态}_{档位}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 组成说明
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组成部分&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;th&gt;允许值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;类型&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drawable 类别&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;bg&lt;/code&gt;（背景）、&lt;code&gt;sel&lt;/code&gt;（选择器）、&lt;code&gt;ic&lt;/code&gt;（图标）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;颜色分类&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gray&lt;/code&gt;、&lt;code&gt;orange&lt;/code&gt;、&lt;code&gt;red&lt;/code&gt;、&lt;code&gt;blue&lt;/code&gt;、&lt;code&gt;green&lt;/code&gt;、&lt;code&gt;black&lt;/code&gt;、&lt;code&gt;white&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;用途&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用场景&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;surface&lt;/code&gt;、&lt;code&gt;fill&lt;/code&gt;、&lt;code&gt;stroke&lt;/code&gt;、&lt;code&gt;field&lt;/code&gt;、&lt;code&gt;interact&lt;/code&gt;、&lt;code&gt;gradient&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;状态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;交互状态&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;idle&lt;/code&gt;、&lt;code&gt;alert&lt;/code&gt;、&lt;code&gt;hint&lt;/code&gt;、&lt;code&gt;emphasis&lt;/code&gt;、&lt;code&gt;neutral&lt;/code&gt;、&lt;code&gt;default&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;档位&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;优先级&lt;/td&gt;
&lt;td&gt;数字 &lt;code&gt;1&lt;/code&gt;（主要）、&lt;code&gt;2&lt;/code&gt;（次要）、&lt;code&gt;3&lt;/code&gt;（第三）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.3 命名示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="err"&gt;bg_orange_fill_interact_1&lt;/span&gt;    &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;橙色交互填充背景，主档位&lt;/span&gt;
&lt;span class="err"&gt;bg_gray_surface_card_1&lt;/span&gt;       &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;灰色卡片表面背景&lt;/span&gt;
&lt;span class="err"&gt;sel_orange_interact_outline_emphasis_default&lt;/span&gt;  &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;橙色描边交互选择器&lt;/span&gt;
&lt;span class="err"&gt;bg_black_fill_scrim_1&lt;/span&gt;        &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;黑色遮罩填充&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 反例：业务绑定如何毁掉复用
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ 错误：文件名承载业务，无法跨场景复用
bg_login_page_primary_btn.xml
bg_order_detail_pay_btn.xml
sel_profile_avatar_upload_error.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;三个文件往往只是圆角、色值、状态略有相似，却无法合并维护。正确做法是共用 &lt;code&gt;sel_orange_interact_capsule_emphasis_default&lt;/code&gt; 等&lt;strong&gt;职能 + 形态&lt;/strong&gt;命名，由不同页面的布局或 Style 决定用在哪里。&lt;/p&gt;




&lt;h2&gt;
  
  
  四、形态层设计：结构 + 功能色引用
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 基础形状类型
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;形状&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;fill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;实心填充&lt;/td&gt;
&lt;td&gt;按钮背景、卡片背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;stroke&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;描边空心&lt;/td&gt;
&lt;td&gt;输入框边框、幽灵按钮&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;flat&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;扁平透明&lt;/td&gt;
&lt;td&gt;文字按钮、点击区域&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;gradient&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;渐变效果&lt;/td&gt;
&lt;td&gt;渐变背景、光晕效果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;surface&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;表面效果&lt;/td&gt;
&lt;td&gt;卡片、浮层、阴影&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4.2 形状定义规范
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- bg_orange_fill_interact_1.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;shape&lt;/span&gt; &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;
    &lt;span class="na"&gt;android:shape=&lt;/span&gt;&lt;span class="s"&gt;"rectangle"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_orange_bg_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"@dimen/draw_corner_capsule"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- bg_orange_stroke_interact_1.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;shape&lt;/span&gt; &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;
    &lt;span class="na"&gt;android:shape=&lt;/span&gt;&lt;span class="s"&gt;"rectangle"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_clear_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;  &lt;span class="c"&gt;&amp;lt;!-- 透明填充 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;stroke&lt;/span&gt; 
        &lt;span class="na"&gt;android:width=&lt;/span&gt;&lt;span class="s"&gt;"@dimen/draw_stroke_reg"&lt;/span&gt; 
        &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_orange_border_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"@dimen/draw_corner_capsule"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;关键设计点&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;@dimen&lt;/code&gt; 引用尺寸（由设计师在 dimens 中定义），避免硬编码&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;@color/func_*&lt;/code&gt; 引用功能色，支持主题切换；&lt;strong&gt;禁止&lt;/strong&gt;在 drawable 中写 &lt;code&gt;#RRGGBB&lt;/code&gt; 或直接引用 &lt;code&gt;t_*&lt;/code&gt;、基础色&lt;/li&gt;
&lt;li&gt;同一套圆角/描边结构可搭配不同色系的功能色，由设计师在 token 层切换映射&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  五、状态色设计：状态逻辑放在 Drawable 层
&lt;/h2&gt;

&lt;p&gt;在设计这套体系时，我们曾讨论过是否需要添加「禁用态」「选中态」「按下态」等状态相关的颜色到颜色层。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;结论：状态色应该放在 drawable 层&lt;/strong&gt;，而不是颜色层。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态类型&lt;/th&gt;
&lt;th&gt;建议位置&lt;/th&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;禁用态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;drawable层&lt;/td&gt;
&lt;td&gt;通过selector组合实现&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;选中态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;drawable层&lt;/td&gt;
&lt;td&gt;通过selector组合实现&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;按下态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;drawable层&lt;/td&gt;
&lt;td&gt;通过selector组合实现&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.1 为什么不在颜色层定义状态色？
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;职责分离&lt;/strong&gt;：颜色层负责提供「原料」，drawable层负责组合「成品」&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;灵活性&lt;/strong&gt;：同一个颜色可以在不同状态下有不同表现&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可复用性&lt;/strong&gt;：一套颜色可以组合出多种状态效果&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.2 状态效果的正确实现方式
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- drawable/sel_orange_interact_capsule_emphasis_default.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;selector&lt;/span&gt; &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- 禁用态 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;android:state_enabled=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;shape&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_black_bg_2"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;  &lt;span class="c"&gt;&amp;lt;!-- 禁用态用灰色背景 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"24dp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- 按下态 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;android:state_pressed=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;shape&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_orange_bg_2"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;  &lt;span class="c"&gt;&amp;lt;!-- 按下态用浅色 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"24dp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- 常态 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;shape&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_orange_bg_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;  &lt;span class="c"&gt;&amp;lt;!-- 常态用主色 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;corners&lt;/span&gt; &lt;span class="na"&gt;android:radius=&lt;/span&gt;&lt;span class="s"&gt;"24dp"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/selector&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  六、组件层设计：状态组合
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Selector 的规范写法
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- sel_orange_interact_capsule_emphasis_default.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;selector&lt;/span&gt; &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- 禁用态 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; 
        &lt;span class="na"&gt;android:drawable=&lt;/span&gt;&lt;span class="s"&gt;"@drawable/bg_gray_fill_interact_2"&lt;/span&gt; 
        &lt;span class="na"&gt;android:state_enabled=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- 按下态 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; 
        &lt;span class="na"&gt;android:drawable=&lt;/span&gt;&lt;span class="s"&gt;"@drawable/bg_orange_fill_interact_2"&lt;/span&gt; 
        &lt;span class="na"&gt;android:state_pressed=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- 常态 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;android:drawable=&lt;/span&gt;&lt;span class="s"&gt;"@drawable/bg_orange_fill_interact_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/selector&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 状态优先级
&lt;/h3&gt;

&lt;p&gt;Selector 中状态判断优先级（&lt;strong&gt;高 → 低&lt;/strong&gt;）：&lt;strong&gt;禁用态&lt;/strong&gt; &amp;gt; &lt;strong&gt;选中态&lt;/strong&gt; &amp;gt; &lt;strong&gt;按下态&lt;/strong&gt; &amp;gt; &lt;strong&gt;焦点态&lt;/strong&gt; &amp;gt; &lt;strong&gt;常态&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 输入框状态示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- sel_gray_field_rect_idle_default.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;selector&lt;/span&gt; &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; 
        &lt;span class="na"&gt;android:drawable=&lt;/span&gt;&lt;span class="s"&gt;"@drawable/bg_gray_field_rect_2"&lt;/span&gt; 
        &lt;span class="na"&gt;android:state_enabled=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; 
        &lt;span class="na"&gt;android:drawable=&lt;/span&gt;&lt;span class="s"&gt;"@drawable/bg_blue_field_rect_1"&lt;/span&gt; 
        &lt;span class="na"&gt;android:state_focused=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;android:drawable=&lt;/span&gt;&lt;span class="s"&gt;"@drawable/bg_gray_field_rect_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/selector&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  七、常用组件的 Drawable 实现
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 按钮组件
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;按钮类型&lt;/th&gt;
&lt;th&gt;Drawable 配置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;主按钮&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sel_orange_interact_capsule_emphasis_default&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;次按钮&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sel_gray_interact_capsule_neutral_default&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;文字按钮&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sel_gray_interact_flat_neutral_default&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;幽灵按钮&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sel_orange_interact_outline_emphasis_default&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  7.2 输入框组件
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;th&gt;Drawable 配置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;常态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sel_gray_field_rect_idle_default&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;警告态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sel_yellow_field_rect_hint_static&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;错误态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sel_red_field_rect_alert_static&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  7.3 卡片组件
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;卡片类型&lt;/th&gt;
&lt;th&gt;Drawable 配置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;普通卡片&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bg_gray_surface_card_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;浮层卡片&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bg_gray_surface_float_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;面板卡片&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bg_gray_surface_panel_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  八、尺寸管理：统一的 Dimen 规范
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 圆角尺寸
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- dimens_drawable.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_corner_none"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;0dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_corner_sm"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;4dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_corner_reg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;8dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_corner_lg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;12dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_corner_capsule"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;999dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;  &lt;span class="c"&gt;&amp;lt;!-- 胶囊形 --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2 描边尺寸
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_stroke_thin"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;0.5dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_stroke_reg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_stroke_thick"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;2dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.3 阴影尺寸
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_shadow_elevation_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;2dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_shadow_elevation_2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;4dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dimen&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"draw_shadow_elevation_3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;8dp&lt;span class="nt"&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  九、与颜色体系的集成
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 颜色引用规范
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- ✅ 正确：引用功能色层 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_orange_bg_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;stroke&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/func_orange_border_1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- ❌ 错误：直接引用主题色或基础色 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/t_orange_4"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;  &lt;span class="c"&gt;&amp;lt;!-- 不推荐 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@color/orange_4"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 禁止 --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9.2 夜间模式自动适配
&lt;/h3&gt;

&lt;p&gt;得益于三层颜色架构，Drawable 层&lt;strong&gt;无需任何修改&lt;/strong&gt;即可支持夜间模式：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;日间模式：
func_orange_bg_1 → t_orange_4 → orange_4 (#FF4B00)

夜间模式：
func_orange_bg_1 → t_orange_4 → orange_3b (#FF8833)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  十、与 View 的集成方式
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10.1 通过 Style 引用
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- styles_button.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Btn.Orange.Capsule.Emphasis"&lt;/span&gt; &lt;span class="na"&gt;parent=&lt;/span&gt;&lt;span class="s"&gt;"BaseButton"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:background"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@drawable/sel_orange_interact_capsule_emphasis_default&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android:textColor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/func_white_text_1&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  10.2 在布局中直接使用
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_width=&lt;/span&gt;&lt;span class="s"&gt;"match_parent"&lt;/span&gt;
    &lt;span class="na"&gt;android:layout_height=&lt;/span&gt;&lt;span class="s"&gt;"wrap_content"&lt;/span&gt;
    &lt;span class="na"&gt;android:background=&lt;/span&gt;&lt;span class="s"&gt;"@drawable/sel_orange_interact_capsule_emphasis_default"&lt;/span&gt;
    &lt;span class="na"&gt;android:text=&lt;/span&gt;&lt;span class="s"&gt;"主操作"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  十一、完整架构总结
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlezn5jgqrx6qum4dtj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlezn5jgqrx6qum4dtj0.png" alt=" " width="552" height="1308"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  十二、总结
&lt;/h2&gt;

&lt;p&gt;Drawable 层是连接颜色和 UI 组件的桥梁，它的设计直接影响到：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI 的一致性和美观度&lt;/li&gt;
&lt;li&gt;代码的可维护性&lt;/li&gt;
&lt;li&gt;主题切换的灵活性&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;通过遵循以下原则，你可以构建一套优秀的 Drawable 体系：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;与业务解耦&lt;/strong&gt;：Drawable 只表达形态与交互语义，绝不使用页面名、流程名、业务事件名&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;分离关注点&lt;/strong&gt;：形态结构与填色引用分离，状态组合与组件分离&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;统一命名规范&lt;/strong&gt;：&lt;code&gt;{类型}_{色系}_{用途}_{状态}_{档位}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;复用优先&lt;/strong&gt;：避免重复定义，提高资源利用率&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;与颜色体系集成&lt;/strong&gt;：只引用设计师定义的 &lt;code&gt;func_*&lt;/code&gt;，支持主题切换&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;参考代码&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/tree/main/app/src/main/res/drawable" rel="noopener noreferrer"&gt;Drawable 资源目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values/styles_button.xml" rel="noopener noreferrer"&gt;样式定义&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values/dimens_drawable.xml" rel="noopener noreferrer"&gt;尺寸定义&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 如果你觉得这篇文章对你有帮助，欢迎点赞、收藏、转发。关注我，获取更多 Android 架构设计干货。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;系列文章&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo"&gt;第一篇：三层颜色体系与系统化设计方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;第二篇：Drawable 层规范与工程实践&lt;/strong&gt;（本文）&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-style-ceng-ru-he-xi-tong-xing-xiao-chu-dai-ma-rong-yu-4nmb"&gt;第三篇：Style 层如何系统性消除代码冗余&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-zong-jie-she-ji-zhu-quan-hui-gui-yu-tuan-dui-luo-di-5h5j"&gt;第四篇：设计主权回归与团队落地&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>android</category>
      <category>architecture</category>
      <category>mobile</category>
      <category>ui</category>
    </item>
    <item>
      <title>Modern UI Architecture (Part 1): Three-Layer Color System</title>
      <dc:creator>goodlords</dc:creator>
      <pubDate>Tue, 19 May 2026 05:11:02 +0000</pubDate>
      <link>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo</link>
      <guid>https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-san-ceng-yan-se-ti-xi-yu-xi-tong-hua-she-ji-fang-an-5ebo</guid>
      <description>&lt;h1&gt;
  
  
  现代化 UI 架构：三层颜色体系与系统化设计方案
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;本文是 &lt;strong&gt;UI 架构系列&lt;/strong&gt; 的第一篇，将深入探讨颜色层的设计。后续文章将依次介绍：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-drawable-ceng-gui-fan-yu-gong-cheng-shi-jian-16km"&gt;第二篇：Drawable 层规范与工程实践&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-style-ceng-ru-he-xi-tong-xing-xiao-chu-dai-ma-rong-yu-4nmb"&gt;第三篇：Style 层如何系统性消除代码冗余&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/zealot2002/xian-dai-hua-ui-jia-gou-zong-jie-she-ji-zhu-quan-hui-gui-yu-tuan-dui-luo-di-5h5j"&gt;第四篇：设计主权回归与团队落地&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;注&lt;/strong&gt;：本文以 Android 为例进行说明，但核心思想完全适用于 iOS、React、H5、小程序等任何平台。&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  前言
&lt;/h2&gt;

&lt;p&gt;在多年的跨平台 App 开发实践中，我发现 UI 资源管理是困扰许多团队的共性问题：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;颜色定义混乱，同一个色值重复定义几十次&lt;/li&gt;
&lt;li&gt;组件形态与颜色过度耦合，难以复用&lt;/li&gt;
&lt;li&gt;样式属性重复书写，维护成本极高&lt;/li&gt;
&lt;li&gt;主题切换困难，夜间模式适配工作量巨大&lt;/li&gt;
&lt;li&gt;新同事需要花费大量时间理解混乱的颜色命名&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果你也被这些问题困扰，这个系列或许值得一读——主要面向设计总监、设计师、研发总监与前端工程师。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;本文要点&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;三层颜色架构的设计理念和核心原则&lt;/li&gt;
&lt;li&gt;每一层的具体设计规范和代码实现&lt;/li&gt;
&lt;li&gt;如何实现日间/夜间模式的无缝切换&lt;/li&gt;
&lt;li&gt;架构的适用场景和扩展方向&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  架构全景
&lt;/h3&gt;

&lt;p&gt;本系列介绍的是一套完整的 &lt;strong&gt;UI 架构体系&lt;/strong&gt;，其中&lt;strong&gt;三层颜色架构&lt;/strong&gt;是核心基础：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32fvzgx9cmo1sf8by6aq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32fvzgx9cmo1sf8by6aq.png" alt=" " width="702" height="1836"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;箭头表示引用/依赖方向：应用层引用 func_&lt;/em&gt;；func_* 引用 t_&lt;em&gt;；t_&lt;/em&gt; 引用基础色。定义权在设计侧，自下而上配置。*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;颜色层依赖关系&lt;/strong&gt;：&lt;code&gt;func_*&lt;/code&gt; → &lt;code&gt;t_*&lt;/code&gt; → 基础色（严格单向依赖）&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;本文聚焦于三层颜色架构的完整设计&lt;/strong&gt;，后续文章将介绍上层应用层如何基于颜色层构建。&lt;/p&gt;




&lt;h2&gt;
  
  
  一、传统颜色管理的核心痛点
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 真实项目中的反例
&lt;/h3&gt;

&lt;p&gt;在我接触过的多个项目中，经常会看到类似这样的颜色定义：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 从真实项目中截取的颜色定义 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"bg_login"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#FFFFFF&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;      &lt;span class="c"&gt;&amp;lt;!-- 登录页背景 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"bg_home"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#F5F5F5&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;      &lt;span class="c"&gt;&amp;lt;!-- 首页背景 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"bg_profile"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#FFFFFF&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 个人中心背景 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"text_title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#141414&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- 标题文字 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"text_desc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#808080&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 描述文字 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"text_hint"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#BFBFBF&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 提示文字 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"button_red"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#DB121F&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- 红色按钮 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"red_button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#DB121F&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- 另一个红色按钮 --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 问题分析
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;问题类型&lt;/th&gt;
&lt;th&gt;具体表现&lt;/th&gt;
&lt;th&gt;影响&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;重复定义&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;#FFFFFF&lt;/code&gt; 和 &lt;code&gt;#DB121F&lt;/code&gt; 多次出现&lt;/td&gt;
&lt;td&gt;改一处需改所有地方，容易遗漏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;业务绑定&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;bg_login&lt;/code&gt;、&lt;code&gt;bg_home&lt;/code&gt; 与具体页面绑定&lt;/td&gt;
&lt;td&gt;无法复用，扩展性差&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;命名混乱&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;button_red&lt;/code&gt; 和 &lt;code&gt;red_button&lt;/code&gt; 同时存在&lt;/td&gt;
&lt;td&gt;新人难以选择，团队协作困难&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;夜间模式灾难&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;需复制所有颜色到 &lt;code&gt;values-night&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;工作量巨大，容易出错&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.3 根本原因
&lt;/h3&gt;

&lt;p&gt;这些问题的本质在于：&lt;strong&gt;颜色定义与业务语义、主题逻辑过度耦合&lt;/strong&gt;。当一个颜色既承载了"背景"的业务含义，又承载了"白色"的具体色值时，任何改动都会牵一发而动全身。&lt;/p&gt;




&lt;h2&gt;
  
  
  二、三层颜色架构设计理念
&lt;/h2&gt;

&lt;p&gt;针对这些问题，我设计了一套&lt;strong&gt;严格单向依赖&lt;/strong&gt;的三层颜色架构：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5h9w6q2bsymy5rv8xud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5h9w6q2bsymy5rv8xud.png" alt=" " width="670" height="1094"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 架构核心原则
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;层级&lt;/th&gt;
&lt;th&gt;唯一职责&lt;/th&gt;
&lt;th&gt;命名规则&lt;/th&gt;
&lt;th&gt;是否承载业务语义&lt;/th&gt;
&lt;th&gt;修改频率&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;基础色层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;定义原始色值&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;色系_数字&lt;/code&gt;（如 &lt;code&gt;white_1&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;❌ 否&lt;/td&gt;
&lt;td&gt;极低（品牌升级时才改）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;主题层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日间/夜间模式映射&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;t_色系_数字&lt;/code&gt;（如 &lt;code&gt;t_white_1&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;❌ 否&lt;/td&gt;
&lt;td&gt;低（新增主题时才改）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;功能色层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UI 职能封装（文本、背景、边框等）&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_{色系}_{职能}_{档位}&lt;/code&gt;（如 &lt;code&gt;func_black_text_1&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;❌ 否&lt;/td&gt;
&lt;td&gt;由设计师维护（新增档位/职能时改）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;重要说明&lt;/strong&gt;：功能色层封装的是 &lt;strong&gt;UI 职能&lt;/strong&gt;（如文本、背景、边框），而非具体业务场景。&lt;code&gt;func_black_text_1&lt;/code&gt; 代表黑色系主档文本色，可用于商品标题、页面标题、按钮文字等任何场景，不绑定具体业务。&lt;strong&gt;功能色的定义权归属设计师&lt;/strong&gt;，研发只引用、不新增。&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 严格单向依赖规则
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jcjuf74mi64l8q8oiob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jcjuf74mi64l8q8oiob.png" alt=" " width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;为什么必须严格遵守单向依赖？&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;避免循环依赖导致的颜色定义混乱&lt;/li&gt;
&lt;li&gt;每层只做自己的事，职责清晰，便于定位问题&lt;/li&gt;
&lt;li&gt;改一处全局生效，维护成本极低&lt;/li&gt;
&lt;li&gt;多人开发不会互相冲突&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  三、分层详解：每一层该怎么设计
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 第一层：全局基础色层
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;定位&lt;/strong&gt;：纯原始色值定义，不做任何主题绑定和业务关联&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;命名规则&lt;/strong&gt;：&lt;code&gt;色系_数字&lt;/code&gt; 下划线格式，数字按明度/饱和度递增&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;设计原则&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;白色系：数字越小越浅（&lt;code&gt;white_1&lt;/code&gt; = 纯白）&lt;/li&gt;
&lt;li&gt;黑色系：数字越小越浅（&lt;code&gt;black_1&lt;/code&gt; = 浅灰）&lt;/li&gt;
&lt;li&gt;彩色系：数字越小饱和度越低&lt;/li&gt;
&lt;li&gt;不参与日夜切换，保持绝对稳定&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;完整基础色表&lt;/strong&gt;（与仓库实现一致）：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;色系&lt;/th&gt;
&lt;th&gt;档位数&lt;/th&gt;
&lt;th&gt;命名区间 / 说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;白色系&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;white_1&lt;/code&gt; ~ &lt;code&gt;white_4&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;黑色系&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;black_1&lt;/code&gt; ~ &lt;code&gt;black_8&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;灰色系&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gray_1&lt;/code&gt; ~ &lt;code&gt;gray_7&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;红色系&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;red_1&lt;/code&gt; ~ &lt;code&gt;red_4&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;橙色系&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;orange_1&lt;/code&gt; ~ &lt;code&gt;orange_4&lt;/code&gt;；含 &lt;code&gt;orange_0&lt;/code&gt;、&lt;code&gt;orange_2b&lt;/code&gt;、&lt;code&gt;orange_3b&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;黄色系&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;yellow_1&lt;/code&gt; ~ &lt;code&gt;yellow_4&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;蓝色系&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;blue_1&lt;/code&gt; ~ &lt;code&gt;blue_4&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;绿色系&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;green_1&lt;/code&gt; ~ &lt;code&gt;green_4&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;补间色&lt;/td&gt;
&lt;td&gt;按需&lt;/td&gt;
&lt;td&gt;如 &lt;code&gt;black_5a&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;透明度变体&lt;/td&gt;
&lt;td&gt;按需&lt;/td&gt;
&lt;td&gt;&lt;code&gt;基础色名_alpha{透明度}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;代码示例&lt;/strong&gt;：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- ✅ 正确：统一色系_数字命名 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"white_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#FFFFFF&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"black_8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#000000&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"red_4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#DB121F&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"black_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#F0F0F0&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"white_1_alpha20"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#33FFFFFF&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 第二层：主题适配层（t_）
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;定位&lt;/strong&gt;：唯一的日夜模式映射层，只做色值代理，不承载任何业务语义&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;命名规则&lt;/strong&gt;：&lt;code&gt;t_基础色名&lt;/code&gt;，与基础色一一对应&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;设计原则&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;只引用基础色层变量，绝对不写具体色值&lt;/li&gt;
&lt;li&gt;日间/夜间模式通过 Android 资源限定符自动切换&lt;/li&gt;
&lt;li&gt;保持与基础色完全一致的命名，便于维护&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;错误做法（常见误区）&lt;/strong&gt;：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- ❌ 错误：主题层承载了业务语义 --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- values/colors.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_bg_page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#FFFFFF&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_text_main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#000000&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- values-night/colors.xml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_bg_page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#141414&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_text_main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#FFFFFF&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：主题层承载了业务语义，破坏了分层原则。新增主题时需要复制所有业务语义的颜色。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- ✅ 正确：只做颜色映射，不关心用途 --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- values/colors_theme_tokens.xml（日间模式） --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_white_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/white_1&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_black_8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/black_8&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_orange_4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/orange_4&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- values-night/colors_theme_tokens.xml（夜间模式） --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_white_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/black_8&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- 背景色反转 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_black_8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/white_1&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- 主文字色反转 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"t_orange_4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/orange_3b&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- 夜间使用较浅的橙色 --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;优势&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;主题层只做颜色映射，不关心用途&lt;/li&gt;
&lt;li&gt;新增主题只需要加一个资源目录&lt;/li&gt;
&lt;li&gt;夜间模式切换完全由 Android 系统自动处理，零代码侵入&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.3 第三层：功能色层（func_）
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;定位&lt;/strong&gt;：面向 UI 职能的语义抽象层，&lt;strong&gt;不承载业务语义&lt;/strong&gt;（如「登录页背景」「删除按钮红」）&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;命名规则&lt;/strong&gt;：&lt;code&gt;func_{色系}_{职能}_{档位}&lt;/code&gt;，档位数字按该职能下的深浅/重要性递增&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;设计原则&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;只引用主题层变量，绝对不直接引用基础色&lt;/li&gt;
&lt;li&gt;采用「色系 × 职能 × 数字档位」模式，保留无限扩展能力&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;由设计师在资源文件中定义与维护&lt;/strong&gt;；研发在布局/代码中只引用已有 token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;为什么我反对固定语义命名？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;很多人喜欢这样定义功能色：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_text_main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_8&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_text_sub"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_5&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_text_aux"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_3&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;这在实际项目中会出问题&lt;/strong&gt;：中间态越来越多，命名很快失控。比如需要一个介于 &lt;code&gt;sub&lt;/code&gt; 和 &lt;code&gt;aux&lt;/code&gt; 之间的颜色时，该叫 &lt;code&gt;func_text_sub2&lt;/code&gt; 还是 &lt;code&gt;func_text_medium&lt;/code&gt;？&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;最佳实践：色系 + 职能 + 数字档位&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 黑色系文本：档位越小越深、越重要 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_black_text_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_8&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_black_text_2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_7&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_black_text_3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_5&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_black_text_4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_3&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 黑色系背景：档位越小越浅 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_black_bg_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_8&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_black_bg_2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_black_7&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- 橙色系强调 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_orange_text_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_orange_4&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_orange_bg_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_orange_4&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;无限扩展能力&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;需要在 &lt;code&gt;func_black_text_2&lt;/code&gt; 与 &lt;code&gt;func_black_text_3&lt;/code&gt; 之间加一档，由设计师新增 &lt;code&gt;func_black_text_25&lt;/code&gt; 即可&lt;/li&gt;
&lt;li&gt;不用造 &lt;code&gt;func_product_title&lt;/code&gt; 这类业务名&lt;/li&gt;
&lt;li&gt;规范可长期稳定&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;职能分类速览&lt;/strong&gt;（详见第六节完整矩阵）：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;职能后缀&lt;/th&gt;
&lt;th&gt;命名示例&lt;/th&gt;
&lt;th&gt;典型用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_text_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;各级文字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_bg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_gray_bg_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;页面、卡片背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_border&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_gray_border_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_divider&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_divider_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;分割线&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_alpha&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_alpha_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;遮罩、半透明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_shadow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_shadow_1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;阴影&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  四、两个关键争议点的深度解析
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 争议1：主题层到底该不该承载业务语义？
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;我的答案：绝对不应该&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;主题层的本质是&lt;strong&gt;颜色代理&lt;/strong&gt;，它的唯一职责是根据当前主题返回对应的基础色。它不应该关心这个颜色是用来做背景还是文字。&lt;/p&gt;

&lt;p&gt;如果主题层承载了业务语义：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;每新增一个主题，你都要复制所有业务语义的颜色&lt;/li&gt;
&lt;li&gt;业务语义变化时，你需要修改所有主题文件&lt;/li&gt;
&lt;li&gt;架构的解耦性被完全破坏&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.2 争议2：功能层用数字命名会不会可读性差？
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;不会，只要约定好规则&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;我们只需要在团队内部约定：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;文本色：数字越小越重要、越深&lt;/li&gt;
&lt;li&gt;背景色：数字越小越浅&lt;/li&gt;
&lt;li&gt;边框色：数字越小越深&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;新人只需要花 5 分钟就能记住这些规则，比记住几十个不同的语义名称要容易得多。&lt;/p&gt;




&lt;h2&gt;
  
  
  五、核心优势：为什么这套架构能解决问题？
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 维护成本显著降低
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;改色流程对比&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;传统做法&lt;/th&gt;
&lt;th&gt;三层架构&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;改品牌色&lt;/td&gt;
&lt;td&gt;全局搜索替换几百个地方&lt;/td&gt;
&lt;td&gt;修改基础色层一处&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;适配夜间模式&lt;/td&gt;
&lt;td&gt;修改所有颜色定义&lt;/td&gt;
&lt;td&gt;自动切换，零代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新增页面&lt;/td&gt;
&lt;td&gt;定义 5-10 个新颜色&lt;/td&gt;
&lt;td&gt;复用设计师已定义的功能色&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.2 无限扩展能力
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;新增色系：只需要在基础色层添加&lt;/li&gt;
&lt;li&gt;新增主题：只需要加一个资源目录&lt;/li&gt;
&lt;li&gt;新增 UI 职能档位：由设计师在功能层顺延数字编号&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.3 团队协作零成本
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;统一的命名规范，没有歧义&lt;/li&gt;
&lt;li&gt;新成员 5 分钟就能上手&lt;/li&gt;
&lt;li&gt;多人开发不会互相冲突&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  六、功能色层详解：7大色系 × 6种职能
&lt;/h2&gt;

&lt;p&gt;在实际项目中，我们发现一个 App 中常用的颜色职能只需要&lt;strong&gt;6种&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;职能&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;文本色&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文字显示&lt;/td&gt;
&lt;td&gt;标题、正文、辅助文字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;背景色&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;填充区域&lt;/td&gt;
&lt;td&gt;页面背景、卡片背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;边框色&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;勾勒边界&lt;/td&gt;
&lt;td&gt;输入框边框、卡片边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;分割线&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分隔内容&lt;/td&gt;
&lt;td&gt;列表分割线、区域分隔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;透明度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;半透明效果&lt;/td&gt;
&lt;td&gt;遮罩、玻璃效果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;阴影色&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;阴影效果&lt;/td&gt;
&lt;td&gt;卡片阴影、按钮阴影&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;而这 6 种职能，组合&lt;strong&gt;7大色系&lt;/strong&gt;，就构成了一个完整的颜色体系。&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 为什么是这7大色系？
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;色系&lt;/th&gt;
&lt;th&gt;特点&lt;/th&gt;
&lt;th&gt;主要用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;黑色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从纯黑到浅灰的完整灰阶&lt;/td&gt;
&lt;td&gt;正文、次要文字、背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;灰色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;独立的灰色梯度&lt;/td&gt;
&lt;td&gt;辅助信息、禁用状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;红色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;高饱和度警示色&lt;/td&gt;
&lt;td&gt;错误、删除、警告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;黄色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;温和警示色&lt;/td&gt;
&lt;td&gt;待处理、进行中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;橙色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;强调色&lt;/td&gt;
&lt;td&gt;热销、促销、主按钮&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;蓝色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;信任色&lt;/td&gt;
&lt;td&gt;链接、信息、成功&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;绿色系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;正向色&lt;/td&gt;
&lt;td&gt;成功、增长、完成&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6.2 完整颜色矩阵
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;文本色（7色系 × 4档 = 28个）&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;色系&lt;/th&gt;
&lt;th&gt;命名&lt;/th&gt;
&lt;th&gt;深浅/饱和度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;黑色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_black_text_1&lt;/code&gt; ~ &lt;code&gt;func_black_text_4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1最深 → 4最浅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;灰色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_gray_text_1&lt;/code&gt; ~ &lt;code&gt;func_gray_text_4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1最深 → 4最浅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;红色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_red_text_1&lt;/code&gt; ~ &lt;code&gt;func_red_text_4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1高饱和 → 4低饱和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;黄色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_yellow_text_1&lt;/code&gt; ~ &lt;code&gt;func_yellow_text_4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1高饱和 → 4低饱和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;橙色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_orange_text_1&lt;/code&gt; ~ &lt;code&gt;func_orange_text_4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1高饱和 → 4低饱和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;蓝色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_blue_text_1&lt;/code&gt; ~ &lt;code&gt;func_blue_text_4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1高饱和 → 4低饱和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;绿色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_green_text_1&lt;/code&gt; ~ &lt;code&gt;func_green_text_4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1高饱和 → 4低饱和&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;背景色（7色系 × 2档 = 14个）&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;色系&lt;/th&gt;
&lt;th&gt;命名&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;黑色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_black_bg_1&lt;/code&gt;, &lt;code&gt;func_black_bg_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;深色背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;灰色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_gray_bg_1&lt;/code&gt;, &lt;code&gt;func_gray_bg_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;浅灰背景、卡片&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;红色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_red_bg_1&lt;/code&gt;, &lt;code&gt;func_red_bg_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;错误背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;黄色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_yellow_bg_1&lt;/code&gt;, &lt;code&gt;func_yellow_bg_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;警告背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;橙色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_orange_bg_1&lt;/code&gt;, &lt;code&gt;func_orange_bg_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;强调背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;蓝色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_blue_bg_1&lt;/code&gt;, &lt;code&gt;func_blue_bg_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;信息背景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;绿色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_green_bg_1&lt;/code&gt;, &lt;code&gt;func_green_bg_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;成功背景&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;边框色（7色系 × 2档 = 14个）&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;色系&lt;/th&gt;
&lt;th&gt;命名&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;黑色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_black_border_1&lt;/code&gt;, &lt;code&gt;func_black_border_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;常规边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;灰色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_gray_border_1&lt;/code&gt;, &lt;code&gt;func_gray_border_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;辅助边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;红色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_red_border_1&lt;/code&gt;, &lt;code&gt;func_red_border_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;错误边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;黄色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_yellow_border_1&lt;/code&gt;, &lt;code&gt;func_yellow_border_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;警告边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;橙色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_orange_border_1&lt;/code&gt;, &lt;code&gt;func_orange_border_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;强调边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;蓝色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_blue_border_1&lt;/code&gt;, &lt;code&gt;func_blue_border_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;信息边框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;绿色系&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;func_green_border_1&lt;/code&gt;, &lt;code&gt;func_green_border_2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;成功边框&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;分割线、透明度、阴影色&lt;/strong&gt;（各7色系 × 2档 = 各14个）：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;色系&lt;/th&gt;
&lt;th&gt;分割线命名&lt;/th&gt;
&lt;th&gt;透明度命名&lt;/th&gt;
&lt;th&gt;阴影命名&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;黑色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_divider_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_alpha_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_shadow_1~2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;灰色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_gray_divider_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_gray_alpha_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_gray_shadow_1~2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;红色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_red_divider_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_red_alpha_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_red_shadow_1~2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;黄色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_yellow_divider_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_yellow_alpha_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_yellow_shadow_1~2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;橙色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_orange_divider_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_orange_alpha_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_orange_shadow_1~2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;蓝色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_blue_divider_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_blue_alpha_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_blue_shadow_1~2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;绿色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_green_divider_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_green_alpha_1~2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_green_shadow_1~2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;理论矩阵规模：7 色系 × 6 职能 × 2–4 档 ≈ 84 个 token&lt;/strong&gt;，可覆盖绝大多数通用 UI 场景。本仓库 demo 仅实现常用子集（见 &lt;code&gt;colors_semantic.xml&lt;/code&gt;）；完整矩阵由设计师按产品需要逐步补齐，研发不自行「补色」。&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 核心原则：职能无关，业务通用
&lt;/h3&gt;

&lt;p&gt;这套颜色体系是&lt;strong&gt;业务无关&lt;/strong&gt;的。同一个 &lt;code&gt;func_red_text_1&lt;/code&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;在电商 App 中可以用作「商品下架」提示&lt;/li&gt;
&lt;li&gt;在社交 App 中可以用作「被拉黑」提示&lt;/li&gt;
&lt;li&gt;在金融 App 中可以用作「交易失败」提示&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;颜色本身不承载业务语义，业务语义由&lt;strong&gt;使用场景&lt;/strong&gt;决定。&lt;/p&gt;

&lt;h3&gt;
  
  
  6.4 反例 vs 正例
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;反例：业务绑定&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- ❌ 错误：业务绑定，无法复用 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_product_delete_text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_red_5&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 商品删除文字 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_order_cancel_text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_red_5&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 订单取消文字 --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;正例：职能无关&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- ✅ 正确：职能无关，业务通用 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_red_text_1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_red_5&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 任何需要红色文字的地方 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;color&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"func_red_text_2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@color/t_red_4&lt;span class="nt"&gt;&amp;lt;/color&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- 任何需要浅红文字的地方 --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.5 完整命名规范速查表
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;命名公式&lt;/strong&gt;：&lt;code&gt;func_{色系}_{职能}_{档位}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;色系前缀&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;前缀&lt;/th&gt;
&lt;th&gt;色系&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;black&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;黑色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_black_text_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gray&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;灰色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_gray_text_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;red&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;红色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_red_text_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;yellow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;黄色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_yellow_text_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;orange&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;橙色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_orange_text_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;blue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;蓝色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_blue_text_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;green&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;绿色系&lt;/td&gt;
&lt;td&gt;&lt;code&gt;func_green_text_1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;职能后缀&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;后缀&lt;/th&gt;
&lt;th&gt;职能&lt;/th&gt;
&lt;th&gt;档位&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文本色&lt;/td&gt;
&lt;td&gt;1-4档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_bg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;背景色&lt;/td&gt;
&lt;td&gt;1-2档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_border&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;边框色&lt;/td&gt;
&lt;td&gt;1-2档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_divider&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;分割线&lt;/td&gt;
&lt;td&gt;1-2档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_alpha&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;透明度&lt;/td&gt;
&lt;td&gt;1-2档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_shadow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;阴影色&lt;/td&gt;
&lt;td&gt;1-2档&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  七、总结
&lt;/h2&gt;

&lt;p&gt;这套三层颜色架构的核心思想其实很简单：&lt;strong&gt;解耦&lt;/strong&gt;。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;把色值定义和主题适配解耦&lt;/li&gt;
&lt;li&gt;把主题适配和 UI 职能语义解耦（职能语义仍由设计师定义，不绑定具体业务页面）&lt;/li&gt;
&lt;li&gt;每一层只做自己最擅长的事&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;通过「7大色系 × 6种职能」的设计，我们构建了一套完整、可扩展、业务无关的颜色体系，覆盖 App 所有通用 UI 场景。&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;参考代码&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values/colors_primitives.xml" rel="noopener noreferrer"&gt;基础色定义&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values/colors_theme_tokens.xml" rel="noopener noreferrer"&gt;日间主题层&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values-night/colors_theme_tokens.xml" rel="noopener noreferrer"&gt;夜间主题层&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zealot2002/arch_ui_token_spec/blob/main/app/src/main/res/values/colors_semantic.xml" rel="noopener noreferrer"&gt;功能色定义&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 如果你觉得这篇文章对你有帮助，欢迎点赞、收藏、转发。关注我，获取更多 Android 架构设计干货。&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>uidesign</category>
      <category>mobile</category>
      <category>architecture</category>
      <category>methodology</category>
    </item>
  </channel>
</rss>
