Premium Glass for Android(高階 Android 玻璃介面)
目標:打造一個平靜、富有空間感且高質感的介面。玻璃是浮動於內容上方的控制項材質,不應隨處濫用。成功檢驗標準:使用者會說「這介面感覺乾淨且富有層次」,而不是「有人對所有東西都加了模糊效果」。
此技能控制材質、層級、深度、動畫與無障礙設計。專案本身的品牌應控制識別與文案。預設品牌值位於 assets/tokens.json(保留色板),可進行替換。
0. 安全性與範圍
- 僅在用戶選取的專案內運作。不得讀取機密、金鑰或環境變數。不得發出網路請求或安裝套件;若需要某個函式庫,請直接命名並讓用戶決定。
- 未經要求不得覆寫現有檔案;請先提出建議(見第 2 節)。
- 僅使用虛構的範例內容。
- 禁止使用 Apple 字體(San Francisco)、SF Symbols、Apple 標誌或 iOS 介面元素。請使用 Inter 以及 Material Symbols / Lucide 風格圖示。
- 標記為 (VERIFY) 的事實可能隨著時間失效(API、版本),請提醒用戶進行確認。
1. 五大強制規則
- 內容區塊絕不使用玻璃材質。卡片、列表列、表單、頁面背景與媒體應保持不透明或柔軟表面。
- 玻璃僅限於浮動層:底部導覽藥丸、滾動內容上方的頂部欄位、浮動動作按鈕、底部表單與選單、搜尋欄位、提示/ Snackbar、小型浮動標籤。
- 禁止玻璃上疊加玻璃。在玻璃表面內部,使用填色、分隔線或不透明度來區隔項目。
- 可讀性優先於美觀。主體文字在最差背景上需達到 4.5:1 對比度(大字型與圖示為 3:1)。請執行
scripts/contrast_check.py。 - 每個玻璃表面都需有實心備援方案(適用於舊版 Android、減少透明度、高對比度、省電模式、裝置停用模糊效果)。
在對任何元素套用玻璃材質前,捫心自問:「這個材質傳達了什麼功能角色?」有效的答案:它浮動於滾動內容上方;它是暫時性或情境感知的;它必須在內容移動時仍保持可觸達。沒有答案就表示不該使用玻璃。
2. 工作流程
- 檢查:平台、最低 / 目標 SDK、現有主題 / 代碼、導覽結構、無障礙需求、效能目標。列出未確定的問題,而非猜測。
- 層級對照表(在任何程式碼之前):元素 -> 層級(內容 / 結構 / 浮動)-> 是否使用玻璃 -> 材質層級 -> 原因的表。與計畫一同呈現。
- 代碼:從
assets/tokens.json開始;調整品牌顏色;在兩種模式(亮/暗)下對每個層級重新執行對比檢查。 - 使用
assets/GlassTheme.kt中的範本與references/compose-implementation.md中的指導進行建構。 - 透過
references/review-checklist.md與scripts/audit_compose.py驗證。報告證據(對比值、每頁玻璃層數、備援畫面截圖)。沒有證據,不得宣稱檢查通過。
3. 材質層級(起始值,單位 dp)
| 層級 | 用途 | 模糊程度 | 填色(暗色) | 填色(亮色) |
|---|---|---|---|---|
| none | 內容、卡片、列表、背景 | - | - | - |
| thin | 僅圖示或大型標籤的控制項 | 16 | 墨水色 @ 0.55 | 白色 @ 0.55 |
| regular | 導覽藥丸、頂部欄、搜尋、FAB、提示 | 24 | 墨水色 @ 0.66 | 白色 @ 0.70 |
| thick | 表單、選單、對話框、文字密集覆蓋層 | 32 | 墨水色 @ 0.78 | 白色 @ 0.82 |
| scrim | 用於模態表單背後的遮暗 | 0-8 | 黑色 @ 0.20-0.45 | 黑色 @ 0.20-0.45 |
詳細資訊與驗證後的對比數值請參閱 references/tokens.md。填色使用表面墨水色調色,而非純白色,以確保暗色模式下的文字在明亮背景上仍可讀。 |
4. Android 實際情況(在承諾任何功能前請先閱讀)
Modifier.blur()/ RenderEffect 模糊的是元素本身的內容,而非其後方的內容。真正的背景模糊需要一個函式庫(Haze 採用 Apache-2.0 授權,支援 Android 上的 Compose)或對話框的視窗模糊。函式庫的 API 名稱會因版本而異:請閱讀已安裝版本的 README(VERIFY)。- 模糊效果需要 Android 12(API 31)或更高版本(VERIFY)。低於此版本,請使用實心備援表面。
- 模態底部表單與對話框位於獨立視窗中,因此合成層內的背景模糊可能無法看到其後的內容。請在支援的情況下使用視窗背景模糊,並檢查
WindowManager.isCrossWindowBlurEnabled(VERIFY),否則使用帶有遮罩的接近不透明厚表單。 - 在純漸層上使用模糊效果是無效的;玻璃需要其後有結構(內容、圖片或刻意設計的柔和光暈)。否則只會浪費效能。
- 預算:每頁最多同時 2-3 個模糊層(低階手機為 1-2 個)。切勿模糊列表項目或整個頁面。不要在大面積表面上動態改變模糊半徑;請調整透明度或變形。
- 請在低階手機(3-4 GB RAM)上,以接近發行版本的建置進行測試。
5. 無障礙模式(全部實作)
- 減少透明度(應用內設定 + 系統「移除動畫」/ 高對比度訊號):將玻璃表面替換為實心表面代碼,並加上 1 dp 的可見邊框。
- 大字型(200%)與 TalkBack:不可僅用顏色傳達資訊;僅圖示的控制項需有標籤;焦點順序合理。
- 減少動態效果:將移動效果替換為淡入淡出;保留狀態回饋。
- 觸控目標至少 48 dp。手勢操作(滑動)必須有按鈕或 customActions 替代方案。
6. 元件
導覽藥丸、頂部欄、FAB、表單、搜尋欄、標籤、卡片、滑動列、分類堆疊、聊天輸入、遮罩值標籤的規範,請參閱 references/components.md。每個角色使用一個圓角半徑(標籤 999、控制項 16、卡片 24、導覽藥丸 28、表單 32);巢狀圓角半徑 = 外部半徑 - 內邊距。
7. 動畫
彈簧動畫 250-350 毫秒,短淡入淡出 150 毫秒,無彈跳過衝。在滑動閾值時提供觸覺回饋。按下狀態:縮放 0.97 加上柔和亮光。尊重減少動態效果設定。
8. 影像提示模式(參考畫面)
當被要求產生模擬畫面提示時,請遵循 references/image-prompts.md:每個提示一個畫面、自包含風格區塊、精確的螢幕文字、玻璃僅限於浮動層、「卡片不透明」、Android 狀態列、無 Apple 元素。參考文件中有六個經過驗證的畫面提示。提醒使用者,生成模型會扭曲小文字與梵文;請將輸出作為版面與氛圍參考,然後在 Figma / Compose 中重建。
9. 審查模式
當被要求審查設計或程式碼時:按層級分類每個元素、計算每頁玻璃層數、執行審查指令碼(python scripts/audit_compose.py <src>)、執行對比指令碼,然後按嚴重性列出發現的問題,並提供來自 references/review-checklist.md 的修正建議。
10. 輸出期望
對於任何任務,請說明:哪些元素使用了玻璃及其原因;使用的層級;對比證據;備援方案;任何近似值或未驗證的部分。保持變更範圍精簡:不要重新設計不相關的 UX;將不相關的問題分開列出。
參考資料與檔案
references/principles.md- 源自 Apple 的設計原則與資料來源references/tokens.md- 代碼表與驗證過的對比結果references/compose-implementation.md- Compose 架構、程式碼片段、備援方案、效能references/components.md- 元件規格與狀態references/image-prompts.md- 提示範本與工作流程references/review-checklist.md- 品質閘門與反模式scripts/contrast_check.py、scripts/audit_compose.py- 本地檢查工具(無網路需求)assets/tokens.json、assets/GlassTheme.kt(可選:將 45 個畫面的 Retain 提示集新增為assets/retain-screen-prompts.md)