### 建立 Material 3 UI 應用程式  - 使用 Jetpack Compose 建立 Material 3 UI,包含載入圖片並在滾動時重新加載 - 需確保 Android Studio 版本與相應的 Material 3 依賴 ### 設定 Material 3 依賴 - Material 3 需要額外的依賴項目,需手動添加 - Android Studio 未來版本將支援直接建立 Material 3 Jetpack Compose 專案 - 需移除舊的 Material 2 依賴,避免與 Material 3 衝突 ### 調整 UI 主題與顏色設置    - Material 3 使用 darkColorScheme 和 lightColorScheme 取代 darkColors 和 lightColors - 移除 primaryVariant,因為 Material 3 不再使用 - colorScheme 取代 colors 作為主題配色 ### 動態顏色支援(Dynamic Colors)    - Material 3 提供動態顏色,根據 Android 12+ 設定變化 - dynamicDarkColorScheme 與 dynamicLightColorScheme 負責自動調整顏色 - 依據 SDK 版本與主題模式(Dark / Light)決定是否啟用動態顏色 - 若設備支援 Android 12+,則使用動態顏色 - 若設備低於 Android 12,則使用自訂顏色方案 ### 設定主要顏色(Primary Colors)  - 主要顏色為應用程式的主色調,例如 Google 建議使用綠色 - primary 設定為 green80(高亮度以適應深色主題) - onPrimary 設定為 green20,用於對比主色的元素 - primaryContainer 設定為 green30,可用於背景或按鈕容器 - onPrimaryContainer 設定為 green90,用於主要容器內的內容 ### 設定次要與輔助顏色(Secondary & Tertiary Colors) - secondary 設定為 darkGreen80,比主色深一些 - onSecondary 設定為 darkGreen20,用於對比次要顏色的內容 - tertiary 設定為 violet80,輔助顏色,用於次要操作(如清除按鈕) - onTertiary 設定為 violet20,確保可讀性 ### 錯誤顏色(Error Colors) - error 設定為 red80,用於錯誤狀態 - onError 設定為 red20,確保錯誤訊息可讀 - errorContainer 設定為 red30,用於錯誤提示框 - onErrorContainer 設定為 red90,用於錯誤框內的文字 ### 設定背景與表面顏色(Background & Surface) - background 設定為 gray10,作為主要背景色 - onBackground 設定為 gray90,確保對比度 - surface 設定為 greenGray30,用於卡片、對話框等表面元素 - onSurface 設定為 greenGray80,適合顯示內容 ### 設定反向顏色(Inverse Colors) - inverseSurface 設定為 gray90,提供對比背景色 - inverseOnSurface 設定為 gray10,確保對比可讀性 - inversePrimary 設定為 green40,適用於特定反向 UI ### 設定額外的顏色變體(Variants & Outline) - surfaceVariant 設定為 greenGray30,與表面顏色保持一致 - onSurfaceVariant 設定為 greenGray80,確保可讀性 - outline 設定為 greenGray80,適用於邊框或輸入框 ### 設定淺色主題(Light Theme) - 與深色主題類似,但色調更亮,適合淺色模式 - 使用相同的顏色架構,但選擇較深的色調來保持對比 - Google 官方提供的標準顏色組合可作為參考 ### 依據 Google 標準選擇顏色 - Google 建議使用特定亮度值(10、20、30、40、80、90)來維持一致性 - 可以使用 HTML Color Picker 選擇主色,並取得不同亮度變體 - 若更換顏色,例如改為橘色,只需保持相同的亮度層級(10、20、30 等) ### 確保顏色相容性與可讀性 - 確保所有顏色搭配有足夠的對比,避免影響可讀性 - 動態顏色可能影響顏色變化,需手動調整某些顏色(如 Surface Variant) - 避免過度使用主要顏色,以維持 UI 階層感 ### 確保 UI 遷移至 Material 3 - 移除舊版 Material 2 相關依賴,避免衝突 - 依照 Material 3 設定新的顏色架構與主題配置 - 測試動態顏色的適應性,確保不同 Android 版本都能正確顯示 ### 設定 Shape 檔案  - 移除不必要的匯入,改為使用 Material 3 的 Shape 設定 - 使用 RoundedCornerShape 和 dp 來定義 UI 元件的圓角 ### 設定 Typography 檔案  - 移除舊版 Typography 匯入,改為 Material 3 的 Typography - 將 Body1 改為 BodyMedium 或 BodySmall 來符合新命名規範 - 其餘設定與 Material 2 相同,只需調整名稱與匯入 ### 修正 MainActivity 相關匯入 - 修正 Surface 匯入,使其來自 Material 3 - color 需改為 colorScheme,而非舊版 colors - 按 Ctrl+Alt+O 自動整理未使用的匯入 ### 建立 ImageCard 組件 - 在主程式包中建立 ImageCard.kt 檔案 - 建立 Composable ImageCard,包含標題、描述、圖片與兩個 Chips - 使用 Card Composable 來建立卡片佈局,並設定適當的 Modifier - 修改卡片顏色,確保與主題一致,避免 Surface 和 Background 在動態顏色下相同 ### 設定 Card 內的顏色  - 使用 CardDefaults.cardColors 來設定容器顏色 - 主要顏色來自 MaterialTheme.colorScheme.surfaceVariant - ContentColor 預設為 onSurfaceVariant,以確保對比度 ### 設定圖片載入與顯示  - 使用 Coil 的 rememberAsyncImagePainter 來載入圖片 - 透過 Modifier 設定圖片圓角、填滿最大寬度,並保持 3:2 的長寬比 ### 設定標題與描述  - 透過 Column 來放置標題與描述,並添加適當的 Padding - 標題使用 TitleLarge,描述使用 BodyMedium,以確保層級一致 ### 設定 FlowRow 來顯示 Chips  - 使用 FlowRow 來確保 Chips 過寬時自動換行 - 設定 mainAxisSpacing 為 8dp,確保間距適當 ### 使用 Assist Chips - 選擇 AssistChip 來顯示次要操作,如「收藏」與「分享」 - 設定 leadingIcon 與 label,確保視覺一致性 - 設定顏色,確保 Chip 的顏色與 Surface Variant 一致 ### 設定 MainActivity 佈局  - 使用 Scaffold 作為主要佈局框架 - 透過 LazyColumn 顯示多個 ImageCard - 透過 FloatingActionButton 設定主要動作按鈕 - 使用 TopAppBar 來顯示標題 ### 設定 FloatingActionButton - 設定 Icon 為 Add,並確保顏色與 PrimaryContainer 一致 - 讓 FloatingActionButton 顯示在 Scaffold 預設的位置 ### 設定 TopAppBar  - 使用 SmallTopAppBar 作為標題列 - 設定顏色為 Surface Variant,確保與主題一致 - 設定 Title Content Color 為 onSurfaceVariant,以確保對比清楚 ### 設定 Scaffold 內的 LazyColumn - 使用 LazyColumn 來顯示 ImageCard 清單 - 設定 contentPadding,確保與其他 UI 元件有適當距離 - 使用 Fake Data 來填充標題與描述 ### 測試與調整 UI - 確保 App 正確顯示深色與淺色主題 - 測試動態顏色變化,確保 UI 會隨系統主題變更 - 若不使用動態顏色,可手動設定主題顏色 ### 設定狀態列顏色 - 預設狀態列顏色為紫色,可在 res/values/themes.xml 修改 - 若希望依據深色或淺色主題變更,可分別設定不同的 themes.xml ### 最終測試與驗證 - 確保 UI 風格符合 Material 3 規範 - 測試不同主題與設備,確保顯示正常 - 調整圓角大小,讓 UI 更加美觀 # Terminology - **Android Studio Dolphin**:Android Studio的版本之一,對Jetpack Compose和Material 3有更好的支持。 - **Android Studio Bumblebee**:舊版本的Android Studio,未內建Material 3的Jetpack Compose專案模板。 - **Material 3 依賴**:Jetpack Compose所需的額外依賴,以支援Material 3 UI元件。 - **Material 2 依賴**:舊版本的Material Design元件,需手動移除以避免混用Material 3。 - **同步依賴(Synchronize Now)**:當修改`build.gradle`後,Android Studio需要同步依賴。 - **深色主題(Dark Color Scheme)**:Material 3的黑暗模式主題配色方案。 - **淺色主題(Light Color Scheme)**:Material 3的亮色模式主題配色方案。 - **動態深色主題(Dynamic Dark Color Scheme)**:根據Android 12+動態生成的深色主題。 - **動態淺色主題(Dynamic Light Color Scheme)**:根據Android 12+動態生成的淺色主題。 - **Build.VERSION.SDK_INT**:檢查裝置的Android版本,以決定是否支援Material 3的動態色彩。 - **Build.VERSION_CODES.S**:代表Android 12的SDK版本代碼。 - **本地環境(Local Context)**:Android Compose環境中用於獲取系統屬性的上下文物件。 - **動態顏色啟用條件**:根據Android版本和主題模式選擇對應的配色方案。 - **色彩方案選擇(Color Scheme Selection)**:根據條件選擇適當的深色、淺色或動態色彩方案。 - **主題顏色(Theme Colors)**:應用程式的整體色彩方案,包括主色、背景色等。 - **顏色定義(Color Definitions)**:在`Color.kt`文件中定義應用程式使用的顏色。 - **色彩亮度級別(Color Brightness Levels)**:不同程度的顏色亮度,如`green 10, 20, 30`等。 - **HTML顏色選擇器(HTML Color Picker)**:用於獲取不同亮度的顏色代碼。 - **主色系(Primary Color Scheme)**:應用程式的主要顏色,如綠色或藍色。 - **次要色系(Secondary Color Scheme)**:與主色系相輔的顏色,通常是深一點的變體。 - **第三色系(Tertiary Color Scheme)**:額外的輔助顏色,用於區別某些特定元素。 - **錯誤色(Error Color)**:代表錯誤狀態的顏色,通常為紅色。 - **中性色系(Neutral Colors)**:包含不同灰度的顏色,用於背景或表面顏色。 - **灰階變體(Gray Variants)**:帶有特定色彩調性的灰色,如`Green Gray`、`Blue Gray`。 - **主色(Primary)**:應用程式主要的標誌性色調。 - **主色容器(Primary Container)**:較主色淡的變體,用於按鈕背景等。 - **主色之上(On Primary)**:應用於主色背景上的文字顏色,確保對比度。 - **主色容器之上(On Primary Container)**:應用於主色容器內的文字顏色。 - **次要色(Secondary)**:與主色相輔的次要顏色。 - **次要色容器(Secondary Container)**:較次要色淡的變體,適用於背景或次要按鈕。 - **次要色之上(On Secondary)**:應用於次要色背景上的文字顏色。 - **次要色容器之上(On Secondary Container)**:應用於次要色容器內的文字顏色。 - **第三色(Tertiary)**:應用程式的輔助色彩,通常與主色、次要色對比。 - **第三色容器(Tertiary Container)**:較第三色淡的變體,用於強調次要元素。 - **第三色之上(On Tertiary)**:應用於第三色背景上的文字顏色。 - **第三色容器之上(On Tertiary Container)**:應用於第三色容器內的文字顏色。 - **錯誤容器(Error Container)**:錯誤訊息的背景顏色,通常比主錯誤色淡。 - **錯誤容器之上(On Error Container)**:應用於錯誤容器內的文字顏色。 - **背景色(Background)**:應用程式的主要背景顏色。 - **背景色之上(On Background)**:應用於背景上的文字顏色。 - **表面色(Surface)**:應用程式中的UI表面顏色,如卡片或對話框。 - **表面色變體(Surface Variant)**:表面顏色的變化版本,可用於區隔內容。 - **表面色之上(On Surface)**:應用於表面上的文字顏色。 - **反向表面色(Inverse Surface)**:深色模式下用於反向UI的背景顏色。 - **反向表面色之上(Inverse On Surface)**:應用於反向表面上的文字顏色。 - **反向主色(Inverse Primary)**:與主色相反的顏色,通常在特定UI中使用。 - **輪廓色(Outline Color)**:用於邊框或分隔線的顏色,確保元素可視化。 - **顏色模式切換(Color Mode Switching)**:根據用戶偏好或系統設置切換淺色與深色模式。 - **自訂顏色方案(Custom Color Scheme)**:開發者自定義的顏色配置,可用於品牌識別。 - **形狀系統(Shape System)**:用於定義UI元件的圓角、邊界和形狀樣式。 - **圓角形狀(Rounded Corner Shape)**:提供不同大小的圓角設定,如小、中、大等級。 - **dp(Density-independent Pixels)**:與裝置螢幕密度無關的尺寸單位,適用於UI設計。 - **Typography(字體排版)**:定義字體樣式,包括標題、正文、標籤等不同等級。 - **Body Medium**:中等大小的正文樣式,用於一般文字內容。 - **Body Small**:小型正文樣式,適用於較小的文字顯示。 - **Title Large**:大標題字體,適用於主要標題區塊。 - **MaterialTheme(材質主題)**:Jetpack Compose中的主題系統,管理顏色、形狀和字體。 - **ColorScheme(顏色方案)**:Material 3的配色系統,包含主要、次要、表面和背景顏色。 - **LazyColumn(懶加載列表)**:用於顯示大量項目的垂直列表,可優化效能。 - **Scaffold(腳手架佈局)**:提供常見UI元素的佈局框架,如頂部欄、底部欄、FAB等。 - **Floating Action Button(FAB)**:懸浮操作按鈕,通常用於主要動作。 - **Icon(圖示)**:Material 3內建的向量圖示,可用於按鈕、標籤等。 - **Outlined Favorite Icon**:帶有外框的「收藏」圖示(心形圖案)。 - **Assist Chip**:提供輔助操作的標籤按鈕,適合次要動作。 - **Suggestion Chip**:用於提供建議選項的標籤,如搜尋建議。 - **Filter Chip**:類似於單選按鈕,可用於過濾選項。 - **Input Chip**:用於顯示使用者輸入的內容,例如電子郵件接收者標籤。 - **FlowRow(流式佈局)**:可將子項目自動換行的佈局方式,適合標籤類型的內容。 - **Content Padding(內容內邊距)**:提供動態內邊距,以適應動畫或變化的UI元素。 - **Content Color For(內容顏色對應)**:根據背景色動態選擇適合的前景色。 - **TextStyle(文字樣式)**:用於定義字體、字重、大小等文字屬性。 - **Top App Bar(頂部應用欄)**:應用程式的標題欄,可顯示標題、按鈕等。 - **Small Top App Bar**:較小的應用欄,適合一般標題用途。 - **Center Aligned Top App Bar**:標題置中的應用欄,適用於標誌性標題。 - **App Bar Colors**:定義應用欄的顏色,如背景色與標題文字顏色。 - **Surface Variant**:表面變體顏色,用於與背景區分的表面元素。 - **Card(卡片)**:Material 3中的容器元件,適合顯示資訊塊。 - **Card Colors**:設定卡片的背景色與內容顏色。 - **Card Defaults**:提供卡片的預設顏色方案,如輪廓、填充樣式。 - **Coil(圖片載入庫)**:用於Jetpack Compose的高效圖片加載庫。 - **RememberAsyncImagePainter**:Coil中的異步圖片加載器,適用於Compose。 - **Clip(裁剪)**:用於剪裁元件形狀,例如圓角矩形、圓形等。 - **Aspect Ratio(寬高比)**:控制圖片或視圖的寬度與高度比例。 - **Spacer(間距元件)**:用於在UI元素之間添加空間。 - **Modifier(修飾符)**:用於控制Compose組件的樣式與行為。 - **FillMaxWidth(填充最大寬度)**:讓元件佔據父容器的全部寬度。 - **SizeMode.Wrap(尺寸模式:包裹內容)**:元件的大小會根據內容調整。 - **Icons.Default.Add**:Material 3的「新增」按鈕圖示。 - **AnnotatedComposable**:用於標記Composable函數,確保其可正確運行。 - **Material 3 Dynamic Colors**:允許應用程式根據使用者的桌布動態變更顏色主題。 - **Theme.xml**:Android的主題設定檔案,可自訂狀態欄顏色等屬性。 - **Status Bar Color(狀態欄顏色)**:Android的頂部狀態列背景色,可根據主題變更。 - **Theme Override(主題覆蓋)**:允許根據使用者偏好覆蓋預設的Material主題設定。 - **Dynamic Theming(動態主題)**:根據裝置系統色彩自動變更應用配色。 - **Image Card(圖片卡片)**:顯示圖片與描述文字的卡片元件。 - **MainActivity(主活動)**:Android應用的主要啟動點,負責渲染UI。 - **GitHub Repository(GitHub儲存庫)**:存放與共享專案程式碼的平台,可用於開源專案管理。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up