### 介紹 Material 3 - Material 3 是 Google 最新的 Material Design 標準 - 取代舊版 Material 2,帶來新設計風格與功能 - 本影片介紹 Material 3 的色彩理論,下一部影片示範如何將 Jetpack Compose 應用程式從 Material 2 遷移到 Material 3 ### Material 3 的主要特色 ![image](https://hackmd.io/_uploads/B1x_r4Phyx.png) ![image](https://hackmd.io/_uploads/HkP8SVwnJx.png) ![image](https://hackmd.io/_uploads/BJFFrVPn1x.png) - Google 官方應用已遷移至 Material 3,如 Google Drive、計算機等 - 支援動態色彩(Dynamic Colors),Android 12+ 可根據桌布自動生成應用程式主題顏色 - 讓所有 Material 3 應用程式風格統一 - 用戶可在「桌布與風格」設定中選擇系統推薦顏色 ### 動態色彩示範 - 當變更系統主題顏色(如選擇橙色)時,支援 Material 3 的應用程式(如計算機)會同步變更 - 具備動態淺色主題與動態深色主題,會根據系統設定(深色/淺色模式)自動適應 ### Material 3 色彩系統概覽 ![image](https://hackmd.io/_uploads/BkjoHND3kl.png) ![image](https://hackmd.io/_uploads/HkdnBNP2yg.png) ![image](https://hackmd.io/_uploads/ryE6S4Dhke.png) ![image](https://hackmd.io/_uploads/HyKTSNvh1x.png) - 新增更多主題顏色,比 Material 2 更加細緻 - 主要色彩分類包括 Primary(主要顏色)、Secondary(次要顏色)、Tertiary(第三顏色) ### 顏色應用原則 ![image](https://hackmd.io/_uploads/H1T1UEvh1e.png) - Primary(主要顏色)用於最重要的 UI 元素(如按鈕、標題),但不宜過度使用 - Secondary(次要顏色)輔助主要顏色,提供層次感,與 Primary 顏色有一定對比但不過於突出 - Tertiary(第三顏色)可選擇性使用,如計算機中的 AC(清除)按鈕,讓特定元素突出但不搶走 Primary 的注意力 ### 新增的 Container 顏色概念 ![image](https://hackmd.io/_uploads/S1dVLVv21e.png) - Container 顏色用於 UI 元件的背景,而非元件本身 - 主要 Container 顏色包括 Primary Container(主要容器色)、On Primary Container(主要容器前景色) - 與 Material 2 不同,在 Material 3,Floating Action Button(FAB)建議使用 Primary Container 而非 Primary 色,以讓設計更柔和 ### Material 3 讓 UI 設計更靈活 - 透過動態色彩,提供一致的使用者體驗 - 透過擴展的色彩系統,提升 UI 的層次與可讀性 - Container 概念讓按鈕與其他元件的背景更有區隔性 ### 中性色與背景色 ![image](https://hackmd.io/_uploads/H1OKUEwhye.png) - 中性色用於背景與表面(Surface)元素 - 表面(Surface)可用於卡片、對話框等,顏色可能與背景相同或不同 - On Background 用於顯示在背景色上的文字或圖示 - On Surface 用於顯示在表面色上的文字或圖示 - Surface Variant 可作為 Surface 的變體,提供額外的顏色選擇 ### 錯誤顏色(Error Colors) ![image](https://hackmd.io/_uploads/r1XsL4v2yx.png) - 用於顯示應用程式中的錯誤狀態 - Error 主要錯誤顏色,通常為紅色 - Error Container 適用於錯誤訊息框,通常為較淺的紅色 - On Error Container 用於錯誤容器上的文字或圖示 ### 產品特定的自訂顏色 ![image](https://hackmd.io/_uploads/rk-6IVPnJg.png) - 可用於品牌顏色,不受動態色彩影響 - 例如 Google 應用程式的標誌色(藍、紅、綠、黃)不會隨系統主題變更 ### 反向顏色(Inverse Colors) ![image](https://hackmd.io/_uploads/ryw0U4vnke.png) - 主要用於對比背景,如淺色主題的深色 Snackbar - Inverse Surface 為 Surface 的反向顏色 - Inverse On Surface 為 Inverse Surface 上的文字或圖示顏色 - Inverse Primary 用於反向環境中的主要顏色 ### 輪廓顏色(Outline Colors) ![image](https://hackmd.io/_uploads/rkxZwEv21g.png) ![image](https://hackmd.io/_uploads/r1mbDEwhJe.png) - Outline 用於邊框,如輸入框的外框線條 - 確保 UI 元素邊界明確,提升可讀性 ### 色調選擇與亮度調整 ![image](https://hackmd.io/_uploads/B13zP4v31l.png) ![image](https://hackmd.io/_uploads/HyWBv4Dn1x.png) - Material 3 根據色調(Tone)來選擇顏色 - 亮度值(0% - 100%)影響顏色深淺,0% 為黑色,100% 為白色 - HTML Color Picker 可用來挑選顏色並查看不同亮度的變化 - Google 提供 Jetpack Compose 參考應用,展示不同顏色如何應用於 UI ### 形狀(Shape) ![image](https://hackmd.io/_uploads/B1wcvNw2yg.png) ![image](https://hackmd.io/_uploads/B1Ksw4v2kx.png) - 可在主題中統一設定 UI 元件的形狀 - 常見形狀類型包括 Rectangle(無圓角)、Extra Small(極小圓角)、Small / Medium(小 / 中等圓角)、特殊形狀(如特定 UI 元素的自訂形狀) - 例如聊天應用可設定對話框的統一形狀 ### 字體與排版(Typography) ![image](https://hackmd.io/_uploads/HkD0w4D3Jl.png) ![image](https://hackmd.io/_uploads/HJNWOEDnke.png) - Material 3 提供不同層級的字體樣式 - 主要分類包括 Display(大標題)、Headline(標題)、Title(子標題)、Label(標籤)、Body(內文) - 每種分類均有 Large、Medium、Small 變體,適用於不同需求 # Terminology - **Material 3**:Google最新的Material Design標準,用於設計現代化應用程式UI。 - **Material 2**:Material Design的上一代版本,提供較少的色彩選擇和樣式。 - **Jetpack Compose**:Android的現代UI工具組,允許開發者使用Kotlin建立直覺化的UI。 - **主色(Primary Color)**:應用程式的主要色彩,用於突顯重要元素。 - **次要色(Secondary Color)**:輔助主色的色彩,通常用於較不突出的元件。 - **第三色(Tertiary Color)**:額外的可選色彩,通常用於特殊用途的元件。 - **動態色彩(Dynamic Colors)**:根據使用者的桌布生成的主題色彩,提供一致的視覺體驗。 - **主題色彩(Theme Colors)**:應用程式整體配色方案的集合,包括主色、次要色等。 - **亮色模式(Light Mode)**:應用程式的淺色主題,適合日間使用。 - **暗色模式(Dark Mode)**:應用程式的深色主題,適合低光環境使用。 - **主色容器(Primary Container)**:比主色更淡的顏色,適用於背景或次要按鈕。 - **次要色容器(Secondary Container)**:比次要色更淡的顏色,適用於次要背景。 - **第三色容器(Tertiary Container)**:比第三色更淡的顏色,適用於特殊元件。 - **錯誤色(Error Color)**:用於表示錯誤或警告的紅色調。 - **表面色(Surface Color)**:應用程式表面(如卡片背景)的主要顏色。 - **背景色(Background Color)**:應用程式的主要背景色,通常比表面色更淺。 - **輪廓色(Outline Color)**:用於邊框或分隔線的顏色,提供視覺區分。 - **反向表面色(Inverse Surface)**:用於對比強烈的背景,以確保可讀性。 - **主要文本顏色(On Primary)**:應用於主色之上的文字或圖示顏色。 - **次要文本顏色(On Secondary)**:應用於次要色之上的文字或圖示顏色。 - **主要容器文本顏色(On Primary Container)**:適用於主色容器的內容顏色。 - **錯誤容器(Error Container)**:錯誤訊息的背景色,提供較柔和的錯誤提示。 - **錯誤容器文本顏色(On Error Container)**:適用於錯誤容器的文字顏色。 - **適應性字體(Adaptive Typography)**:根據裝置螢幕大小自動調整字體大小。 - **材質主題(Material Theming)**:可客製化Material Design元件的系統。 - **形狀系統(Shape System)**:控制按鈕、卡片等元件的邊角半徑和形狀。 - **高光層(Elevation Overlay)**:在暗色模式下模擬陰影效果,使UI更具層次感。 - **按鈕變體(Button Variants)**:Material 3提供不同類型的按鈕,如Filled、Outlined等。 - **填充按鈕(Filled Button)**:實心背景的按鈕,適用於主要操作。 - **描邊按鈕(Outlined Button)**:僅有邊框的按鈕,適用於次要操作。 - **文本按鈕(Text Button)**:無邊框的按鈕,適用於次要操作或連結。 - **浮動操作按鈕(FAB, Floating Action Button)**:懸浮在畫面上的主要行動按鈕。 - **擴展式FAB(Extended FAB)**:帶有標籤的浮動操作按鈕。 - **導航列(Navigation Bar)**:應用程式底部的導航欄,可快速切換頁面。 - **導航抽屜(Navigation Drawer)**:側邊滑出的選單,用於切換不同區域。 - **分頁欄(Tab Bar)**:頂部的分頁切換控制元件。 - **卡片(Card)**:顯示資訊的容器,通常帶有陰影效果。 - **對話框(Dialog)**:彈出式視窗,用於提示使用者或要求輸入。 - **通知橫幅(Snackbar)**:短暫顯示的訊息,用於提示操作結果。 - **進度條(Progress Indicator)**:顯示操作進度的元件,可為圓形或線性。 - **拉動刷新(Pull-to-Refresh)**:向下滑動重新整理內容的手勢。 - **可折疊元件(Collapsible Components)**:可展開與折疊的元件,如手風琴式列表。 - **拖曳手勢(Drag Gesture)**:支援拖曳操作的UI互動。 - **動態色彩適用性(Dynamic Color Adaptation)**:確保動態色彩在各種UI元素上的可讀性。 - **系統色彩對應(System Color Mapping)**:將動態生成的顏色映射到Material 3的色彩系統。 - **佈局自適應(Responsive Layout)**:根據螢幕大小自動調整佈局。 - **語意色彩(Semantic Colors)**:根據用途(如成功、警告、錯誤)定義顏色,而非純粹視覺效果。 - **可存取性(Accessibility)**:確保UI符合無障礙標準,如對比度與文字大小。 - **動畫與轉場(Motion & Transitions)**:Material 3提供的動畫效果,如漸變與縮放。 - **區塊陰影(Shadow Elevation)**:控制元件的陰影高度,以營造層次感。 - **透明度變化(Opacity Variation)**:根據使用情境改變元件的不透明度。 - **適應性圖示(Adaptive Icons)**:可根據不同設備與主題自動調整的應用程式圖示。 - **中性色(Neutral Colors)**:用於背景和表面顏色,確保UI的穩定性和可讀性。 - **表面(Surface)**:指的是應用程式內的可視區域,如卡片或容器。 - **表面變體(Surface Variant)**:表面的變化版本,可用於次要背景或區隔內容。 - **背景色(Background Color)**:應用程式的主要背景色,與表面色類似但用途更廣。 - **表面上的顏色(On Surface)**:應用於表面上的文字或圖示,確保可讀性。 - **背景上的顏色(On Background)**:應用於背景上的文字或圖示,確保對比度適當。 - **錯誤色(Error Color)**:用於錯誤訊息的顏色,通常為紅色或警告色。 - **錯誤容器(Error Container)**:用於錯誤訊息背景的顏色,提供更柔和的顯示方式。 - **錯誤容器上的顏色(On Error Container)**:適用於錯誤容器內的文字或圖示。 - **產品專屬顏色(Product-Specific Colors)**:品牌或產品固定的顏色,不受動態色彩影響。 - **反向顏色(Inverse Colors)**:用於強調特定UI元素,例如深色背景上的淺色按鈕。 - **反向表面色(Inverse Surface)**:與表面色相反的顏色,用於對比設計。 - **反向表面上的顏色(Inverse On Surface)**:適用於反向表面上的文字或圖示。 - **反向主色(Inverse Primary)**:與主要顏色相對應的反向色,可用於強調UI元素。 - **輪廓色(Outline Color)**:用於邊框或分隔線,使元素更易於識別。 - **色調系統(Tonal System)**:根據顏色亮度(0-100%)選擇適合的色調。 - **HTML顏色選擇器(HTML Color Picker)**:工具可用來查找不同亮度的顏色代碼。 - **亮度百分比(Lightness Percentage)**:控制顏色的亮度範圍(0%為黑,100%為白)。 - **顏色變體(Color Variants)**:從基礎顏色生成不同亮度與飽和度的版本。 - **主要色調(Primary Tone)**:應用程式主要的標誌性色調。 - **次要色調(Secondary Tone)**:用於輔助主色的調和色調。 - **第三色調(Tertiary Tone)**:額外可用的顏色變化,可用於區分重要性較低的元素。 - **形狀系統(Shape System)**:定義應用程式中UI元素的形狀與邊角樣式。 - **形狀類型(Shape Type)**:包含矩形、圓角、圓形等不同形狀。 - **額外小型形狀(Extra Small Shape)**:最小的圓角設定,通常接近矩形。 - **小型形狀(Small Shape)**:帶有輕微圓角的形狀。 - **中型形狀(Medium Shape)**:適中的圓角設定,常見於按鈕或輸入框。 - **自訂形狀(Custom Shape)**:開發者可以定義特殊形狀以符合應用需求。 - **文字排版(Typography)**:定義應用程式內各類文字的大小、字重與風格。 - **標題字體(Headline Typography)**:用於主要標題,字體較大,具有強調作用。 - **顯示字體(Display Typography)**:適用於特大字體,主要用於標誌或大型標題。 - **標題大(Headline Large)**:最大的標題樣式,適用於主要標題。 - **標題中(Headline Medium)**:標題大小適中,適用於次要標題。 - **標題小(Headline Small)**:最小的標題樣式,適用於一般標題。 - **標題與副標(Title & Subtitle)**:較標題小一級,通常用於區分內容區塊。 - **標籤字體(Label Typography)**:用於按鈕或標籤的文字。 - **正文字體(Body Typography)**:應用於一般內文,確保可讀性。 - **類別分級(Type Scale & Tokens)**:Material 3 提供的字體等級與預設風格。 - **顯示字體大(Display Large)**:特大標題字體,通常用於應用程式的主標題。 - **顯示字體中(Display Medium)**:次大標題,適用於強調內容。 - **顯示字體小(Display Small)**:適用於次要標題或大型說明文字。 - **標題字體(Headline)**:應用於較重要的標題,如區塊標題或主要導航。 - **標題大(Headline Large)**:主要標題,較顯示字體小但仍有強調作用。 - **標題中(Headline Medium)**:適用於次標題,提供較佳的層次感。 - **標題小(Headline Small)**:適用於較細緻的標題,如小型區塊標題。 - **標籤字體大(Label Large)**:適用於按鈕或標籤,清楚標示功能。 - **標籤字體小(Label Small)**:適用於較小的標籤,如輔助資訊顯示。 - **正文大(Body Large)**:適用於一般內文,確保可讀性。 - **正文中(Body Medium)**:適用於次要內文,適合長篇內容。 - **正文小(Body Small)**:適用於較細緻的內文,如註釋或額外資訊。 - **動態主題(Dynamic Theming)**:允許應用程式根據系統或用戶設置變更主題色彩。 - **全局樣式(Global Styles)**:可在整個應用程式內使用的顏色、字體與形狀設定。 - **系統級主題(System-Level Theming)**:允許應用程式依照系統的顏色與設定自動調整UI。