### 響應式設計的基本原則
* 分析 mockup,先拆解成可重複使用的獨立 UI 元件(如按鈕、欄位)
* 結構改變需使用 Window Size Class,大小改變可靠動態尺寸與 Modifier 解決
* 避免以 if-else 決定所有畫面分支,重複代碼低效又難維護
* 同樣結構但排版不同的情況,如 Column 改 Row,需以條件控制 layout
### 尺寸變化處理策略
* 使用 Modifier 搭配 relative 單位(如 fillMaxWidth, weight, maxWidth)
* 不需針對每種裝置設定尺寸,只要保持 layout 自適應即可
* 若只是欄位寬度變化,無需切換 UI 結構
### 結構變化處理策略
* 畫面結構不同(如橫向變 row),需判斷 Window Size Class
* 利用 Compact / Medium / Expanded 判斷畫面寬度類型決定 UI 排版邏輯
* 控制如 Header 對齊方式(左對齊 vs 置中)也需透過這類邏輯調整
### UI 拆解策略
* 可重用元件如按鈕、TextField 先獨立出來,方便全專案共用
* 每個畫面組成元件應模組化,避免複製貼上
* 重構範例:Header 段落為兩行文字,用 Column 包住,對齊方式參數化
### 按鈕元件設計(NotemarkButton)
* 使用 Material 3 Button,設定 primary container color
* 提供文字、onClick、Modifier 參數
* 套用自定義圓角與間距
* 使用 MaterialTheme.typography.titleSmall 控制字型樣式
### 輸入欄位元件設計(NotemarkTextField)
* 基於 OutlinedTextField,封裝 label、hint、文字變更等基本參數
* 支援密碼欄位顯示與切換可視狀態,使用本地狀態控制
* 密碼遮罩使用 asterisk,非預設圓點樣式
* 動態設定顏色,如聚焦邊框顏色、背景顏色、游標顏色
* 支援自定 trailingIcon,控制密碼可見性切換
### 設計系統與架構實踐
* 共用元件集中於 designSystem 套件(如 NotemarkButton、NotemarkTextField)
* 統一使用 MaterialTheme 設定的 colorScheme 與 typography
* TextField 支援 placeholder 與內容共用樣式,維持一致性
* 狀態邏輯單純的交互元件(如密碼可視切換)可直接在 composable 實作
### 工具與依賴說明
* Compose Multiplatform 支援 Material 3 與 Material Icons Extended
* 引入 `compose.material.icons.extended` 以使用預設 visibility icon
* 所有字型、顏色設計由主題檔定義,維持與 Figma Mockup 一致
### 建立可重用的 Link 元件
* 在 `designSystem` 中新增 `NotemarkLink` 元件
* 使用 `Text` composable 搭配 `clickable` modifier 處理點擊事件
* 設定 `textStyle` 為 `MaterialTheme.typography.titleSmall`
* 設定顏色為 primary、文字對齊為置中
---
### 準備畫面結構與 scaffold 設定
* 使用 `Scaffold` 作為根 composable 處理 Window Insets
* 以 `Modifier.fillMaxSize()` 填滿整個畫面
* 僅使用 `WindowInsets.statusBars`,避免底部導覽列被覆蓋
* 使用 `consumeWindowInsets` 搭配 `WindowInsets.navigationBars` 保留底部空間
---
### Header 區塊拆分為獨立 Composable
* 抽出 `LoginHeaderSection` 作為可重用組件
* 內部使用 `Column` 包含「Login」標題與描述文字
* 描述字體為 `bodyLarge`,標題字體為 `titleLarge`
* 可依據畫面尺寸改變文字對齊(未來支援)
---
### 建立 Login 表單區塊
* 抽出 `LoginFormSection`,接收 email/password 狀態與變更函式
* 使用 `NotemarkTextField` 顯示 email 與 password 欄位
* 設定對應 label/hint 與 `isInputSecret` 控制密碼隱藏顯示
* 使用 `Spacer` 控制欄位間距(16dp)
* 按鈕使用 `NotemarkButton`,文字為 "Log in"
* 底部使用 `NotemarkLink` 顯示註冊提示並置中對齊
---
### 管理 State 與狀態綁定
* 使用 `remember` 管理 email/password 狀態變數
* 將狀態值與更新函式傳遞至 `LoginFormSection`
* 密碼欄位內部管理 `isPasswordVisible` 狀態切換顯示密文/明文
---
### UI 微調與排版優化
* 使用 `Modifier.fillMaxWidth()` 確保 TextField 寬度正確
* 加入 `Arrangement.spacedBy(32.dp)` 增加區塊間距
* 調整 Padding,移除過多的 top padding 適應 mobile portrait
* 優化密碼切換圖示邏輯:根據 `isPasswordVisible` 切換 visibility icon
---
### 設計考量與後續擴充點
* 每個 composable 分離管理,便於之後支援 tablet、橫向畫面
* 所有顏色、樣式均來自 MaterialTheme,與設計稿一致
* Responsive 邏輯可依 Window Size Class 擴充至 LoginScreen 中不同佈局排列
* 使用 Scaffold + Surface 結合背景色切割畫面區域,模擬 bottom sheet 視覺效果
---
### 新增適應式依賴與 Window Size Class
* 在 `libs.versions.toml` 引入 Material3 Adaptive 1.1.1
* 使用 `windowSizeClass` 取得寬度與高度級別 (Compact / Medium / Expanded)
* 僅尺寸差異用動態 Modifier 處理,結構差異才判斷 size class
### 建立 DeviceConfiguration 列舉
* Mobile 直向:寬 Compact、高 Medium
* Mobile 橫向:寬 Expanded、高 Compact
* Tablet 直向:寬 Medium、高 Expanded
* Tablet 橫向:寬 Expanded、高 Medium
* 其他組合視為 Desktop
### 依組態切換根版面
* Mobile 直向:Column 排版,元素填滿寬度
* Mobile 橫向:Row 排版,左右各佔 50%,加 `displayCutout` padding
* Tablet / Desktop:Column 排版置中,`widthIn(max = 540.dp)`,Header 文字置中
### 版面微調與 Modifier
* `weight()` 平均分配寬度
* `widthIn(max = ...)` 控制平板與桌面最大內容寬度
* `verticalScroll` 處理高度不足
* `displayCutout` 與 `navigationBars` Insets 避免瀏海和底部列遮擋
### 元件重用策略
* Header、Form、Button、TextField、Link 抽為獨立 composable
* Layout 僅負責排版,元件不感知 size class
* 使用 `MaterialTheme` 顏色與字型保持統一風格
### 響應式設計心法
* 優先使用相對單位處理純尺寸變化
* 結構或對齊差異時才使用 Window Size Class
* 避免大量 if‑else 重複畫面,透過 enum + when 切換根排版
* 測試各裝置方向,確保無遮擋且可捲動
# 選擇題
1. 下列哪個 Compose API 可用於調整元件最大寬度?
A. fillMaxSize()
B. maxWidth()
C. widthIn()
D. size()
**答案:C**
2. 在 Jetpack Compose 中要取得目前視窗尺寸類別,應使用哪個 API?
A. WindowWidth()
B. rememberWindowSizeClass()
C. currentWindow()
D. getScreenSizeClass()
**答案:B**
3. Compact WindowSizeClass 代表?
A. 平板橫式
B. 電視畫面
C. 手機直式
D. 手機橫式
**答案:C**
4. 若 UI 僅尺寸變動,但排版不變,建議使用什麼技術?
A. windowSizeClass
B. 多重 if 判斷
C. 相對單位與 weight
D. ConstraintLayout
**答案:C**
5. 若 UI 排版結構因螢幕寬度改變,建議使用?
A. Column + Spacer
B. windowSizeClass
C. Padding 調整
D. LazyColumn
**答案:B**
6. 在 landscape 模式中,元件排版建議?
A. 一律使用 Column
B. 使用 FlowRow
C. 改用 Row 排列元件
D. 使用 Box 重疊顯示
**答案:C**
7. 若想根據寬度調整對齊方式,應該使用?
A. widthModifier
B. when 判斷 window size class
C. alignSelf()
D. fixedPadding()
**答案:B**
8. Compose 中 weight 修飾符主要用於?
A. 設定對齊
B. 調整高度
C. 計算佔比寬度
D. 設定邊框
**答案:C**
9. Compose 中想限制元件最大寬度,應用哪個修飾符?
A. fillMaxWidth()
B. widthIn(max = x.dp)
C. maxWidth()
D. sizeIn()
**答案:B**
10. 設計響應式 UI 時,最應避免的做法是?
A. 抽離可重用 Composable
B. 依畫面尺寸分類結構
C. 為每種尺寸複製整個畫面程式碼
D. 使用相對單位與 padding
**答案:C**
11. 若希望某欄位僅在平板時置中對齊,應使用?
A. Modifier.center()
B. TextAlign.Center + windowSizeClass 判斷
C. forceAlign()
D. setCenterOnTablet()
**答案:B**
12. Compose 中要放置 text 和 TextField 的組合常見做法是?
A. LazyRow
B. Column
C. Scaffold
D. Box
**答案:B**
13. 在 Composable 中設置 padding 應使用哪個修飾符?
A. Modifier.margin()
B. Modifier.spacing()
C. Modifier.padding()
D. Modifier.indent()
**答案:C**
14. 為何要將按鈕與文字欄位封裝進 DesignSystem package?
A. 易於被垃圾回收
B. 支援多語系
C. 方便重用與維護
D. 可加快 RenderSpeed
**答案:C**
15. TextField 預設使用的樣式是?
A. PlainTextField
B. OutlinedTextField
C. MaterialEditText
D. ComposeTextBox
**答案:B**
16. 顯示密碼時用到哪個 transformation?
A. VisualTransformation.None
B. MaskTransformation
C. AsteriskTransformation
D. PasswordVisualTransformation
**答案:D**
17. 想將輸入文字轉為星號符號,應使用?
A. CharMaskTransformer
B. VisualTransformation.Asterisk
C. PasswordVisualTransformation('\*')
D. HiddenFieldTransformer
**答案:C**
18. OutlineTextField 的 focused border color 可自定為?
A. MaterialTheme.colorScheme.primary
B. BorderColor.Focused
C. MaterialColor.Blue
D. Modifier.borderColor()
**答案:A**
19. 若不希望 TextField 背景顏色,在 focused 狀態下應設為?
A. Color.White
B. Color.Gray
C. Color.Transparent
D. Null
**答案:C**
20. 對於會重複出現的 UI 組件,正確做法為?
A. 每次寫新的
B. 使用 copy-paste
C. 抽成 Composable
D. 改寫為 XML
**答案:C**
21. Compose 中設定元件形狀為圓角應使用?
A. RoundedCornerShape(x.dp)
B. BorderRadius(x)
C. CornerDp(x)
D. Radius.dp(x)
**答案:A**
22. Compose 的 Button 預設內容為?
A. 文字與 Icon
B. Text()
C. No content
D. ButtonView()
**答案:B**
23. 密碼欄的右側可加哪個 icon 提供可見切換?
A. PasswordToggleIcon
B. Visibility
C. PasswordEye
D. ShowHide
**答案:B**
24. TextField 欄位中用於提示輸入文字的屬性為?
A. label
B. hint
C. placeholder
D. supportText
**答案:C**
25. 若要支援 TextField 的 error 狀態應使用?
A. isError
B. supportText
C. errorLabel
D. borderColor.Red
**答案:A**
26. password toggle icon 的行為應放在哪裡?
A. ViewModel
B. Composable 本體
C. Scaffold
D. NavHost
**答案:B**
27. Compose 中 TextStyle 使用方式為?
A. FontStyle = textTheme.body
B. style = MaterialTheme.typography.bodyLarge
C. font = ComposeFont.bodyMedium
D. theme = TextThemes.Default
**答案:B**
28. `TrailingIcon` 通常用來處理?
A. 輸入格式驗證
B. 按鈕動畫
C. 顯示額外功能 icon
D. 控制 UI 尺寸
**答案:C**
29. 若使用者尚未輸入文字,可透過哪個屬性顯示預設提示?
A. label
B. text
C. placeholder
D. hint
**答案:C**
30. 畫面元件的排版與結構應根據什麼調整?
A. 屏幕 DPI
B. 使用者語言
C. 視窗尺寸類別
D. 裝置記憶體大小
**答案:C**
1. 建立 NotemarkLink 元件時,應使用哪個組件實現點擊功能?
A. Box
B. Text
C. Column
D. Spacer
**答案:B**
2. NotemarkLink 中使用哪個 Modifier 讓文字可點擊?
A. selectable()
B. enabled()
C. clickable()
D. focusable()
**答案:C**
3. 要設定文字樣式為標題小字,應使用哪個樣式?
A. MaterialTheme.typography.bodySmall
B. MaterialTheme.typography.titleSmall
C. MaterialTheme.typography.caption
D. MaterialTheme.typography.headlineSmall
**答案:B**
4. 登入畫面中,哪個 Composable 最常用來處理狀態列與導航列的間距?
A. Column
B. Scaffold
C. Box
D. LazyColumn
**答案:B**
5. 使用 Scaffold 時,應提供哪個 Modifier 以填滿整個畫面?
A. fillMaxSize()
B. matchParentSize()
C. expandAll()
D. fullWidth()
**答案:A**
6. 使用 Scaffold 時獲得內部 padding 的變數名稱是?
A. padding
B. windowInsets
C. innerPadding
D. safeAreaPadding
**答案:C**
7. 登入畫面預設先建立哪個裝置方向的版面?
A. 平板橫式
B. 手機橫式
C. 手機直式
D. 桌機視窗
**答案:C**
8. Header 區塊中,主標題與描述文字應放在哪個容器中?
A. Box
B. Row
C. LazyColumn
D. Column
**答案:D**
9. 描述文字樣式應使用哪一種?
A. titleLarge
B. labelSmall
C. bodyLarge
D. displaySmall
**答案:C**
10. 要讓區塊只圓角上方兩角,應使用哪兩個 Corner 定義?
A. BottomStart, BottomEnd
B. TopStart, TopEnd
C. Start, End
D. AllCorners
**答案:B**
11. 哪個 Modifier 可用於裁剪元件角落形狀?
A. border()
B. shape()
C. clip()
D. round()
**答案:C**
12. 為了設定背景為純白色,應使用哪個色彩參數?
A. MaterialTheme.colorScheme.background
B. MaterialTheme.colorScheme.primary
C. MaterialTheme.colorScheme.surfaceContainerLowest
D. Color.White
**答案:C**
13. 垂直方向 24.dp、水平 16.dp 的 padding 應使用哪個 Modifier?
A. padding(16.dp)
B. padding(horizontal = 16.dp, vertical = 24.dp)
C. margin(16.dp, 24.dp)
D. inset(16.dp, 24.dp)
**答案:B**
14. 若 Scaffold 不要套用導航列內邊距,應使用什麼設定?
A. contentPadding = PaddingValues.Zero
B. windowInsets = WindowInsets.systemBars
C. contentWindowInsets = WindowInsets.statusBars
D. windowInsets = WindowInsets.statusBars
**答案:D**
15. 若 Column 需要考慮導航列內邊距,應加入哪個 Modifier?
A. applyInsets()
B. respectSystemBars()
C. consumeWindowInsets(WindowInsets.navigationBars)
D. fillSystemInsets()
**答案:C**
16. 表單中的文字欄位應該被包在什麼 Composable 裡?
A. Row
B. Box
C. Column
D. Scaffold
**答案:C**
17. NotemarkTextField 欄位若為密碼,參數 isInputSecret 應設定為?
A. true
B. false
C. null
D. 0
**答案:A**
18. 要讓欄位填滿寬度,需加入哪個 Modifier?
A. matchWidth()
B. wrapContentWidth()
C. fillMaxWidth()
D. expandHorizontally()
**答案:C**
19. 在欄位之間加垂直間距,常用哪個 Composable?
A. Divider
B. Spacer
C. Line
D. EmptyBox
**答案:B**
20. 登入按鈕使用哪個元件建立?
A. BasicButton
B. NotemarkButton
C. PrimaryButton
D. ActionButton
**答案:B**
21. 若只想讓連結置中對齊,應使用哪個對齊設定?
A. align(Alignment.CenterVertically)
B. align(Alignment.Center)
C. align(Alignment.CenterHorizontally)
D. align(Alignment.Bottom)
**答案:C**
22. 建立登入畫面狀態應使用哪個方法儲存狀態?
A. mutableStateFlow
B. remember { mutableStateOf(...) }
C. LiveData
D. savedStateHandle
**答案:B**
23. 密碼可見性的切換應該依據哪個狀態顯示不同圖示?
A. isInputSecret
B. isPasswordHidden
C. isPasswordVisible
D. showPasswordIcon
**答案:C**
24. 若 text field 圖示為 visibility off,代表?
A. 顯示文字
B. 隱藏文字
C. icon disabled
D. 欄位鎖定
**答案:B**
25. 改變輸入文字時,應使用哪個 lambda 接收?
A. onUpdate()
B. onValueChanged()
C. onTextChanged()
D. onValueChange()
**答案:D**
26. 填寫 email 欄位的提示文字範例是?
A. [john@example.com](mailto:john@example.com)
B. [user@example.com](mailto:user@example.com)
C. [john.doe@sample.com](mailto:john.doe@sample.com)
D. [john@doacample.com](mailto:john@doacample.com)
**答案:D**
27. Composable 名稱中通常用哪個命名慣例?
A. snake\_case
B. camelCase
C. PascalCase
D. kebab-case
**答案:C**
28. 為了防止重複樣式,登入表單應抽成什麼?
A. function
B. Composable
C. class
D. lambda
**答案:B**
29. 垂直元素間距可使用哪個 verticalArrangement 參數?
A. spacedBy(x.dp)
B. distributedBy(x.dp)
C. padding(y.dp)
D. offset(x.dp)
**答案:A**
30. NotemarkLink 的文字內容應該是?
A. Register here
B. Create an account
C. Don't have an account
D. Sign up now
**答案:C**
1. 哪一個情況最適合使用 `window size classes`?
A. 永遠使用固定寬高
B. 設計桌面版應用程式
C. 根據裝置螢幕的寬高自適應 UI
D. 固定螢幕方向
答案:C
2. 下列哪一個不是 `WindowSizeClass` 的寬度分類?
A. Compact
B. Medium
C. Extended
D. Expanded
答案:C
3. 使用 `window size classes` 的目的為何?
A. 增加記憶體效能
B. 根據螢幕大小切換 UI 結構
C. 優化網路流量
D. 加速動畫轉場
答案:B
4. 若要根據 `width` 與 `height` 共同決定裝置類型,哪個做法正確?
A. 只看 width
B. 只看 height
C. 結合 width 與 height class
D. 使用螢幕 DPI
答案:C
5. `Material3 adaptive` 的版本建議使用哪個版本?
A. 2.0.0
B. 1.1.1
C. 3.0.0
D. 0.9.9
答案:B
6. 若裝置為手機直向,應該落在什麼寬高類別?
A. width = expanded, height = compact
B. width = compact, height = medium
C. width = medium, height = compact
D. width = expanded, height = medium
答案:B
7. 在 mobile landscape 中應該如何安排 UI?
A. 使用 Column 並置中
B. 使用 Row 並加上等權重
C. 使用 Box
D. 使用固定寬度
答案:B
8. 哪個 Android 工具能處理 display cutouts(螢幕凹口)?
A. Modifier.padding(16.dp)
B. Modifier.windowInsetsPadding(WindowInsets.displayCutout)
C. Modifier.ignoreCutouts()
D. Modifier.fullscreen()
答案:B
9. 在 tablet landscape 上最適合的 UI 配置方式是?
A. 與手機 landscape 相同
B. 與手機 portrait 相同
C. 顯示單一區塊
D. 固定比例拉伸 UI
答案:B
10. 如果需要針對不同裝置設定不同 UI,建議做法是?
A. 使用 `if-else` 判斷螢幕 DPI
B. 建立 enum class 表示裝置配置
C. 建立不同 layout XML
D. 強制所有裝置使用 portrait 模式
答案:B
11. `DeviceConfiguration` enum class 的作用為何?
A. 儲存裝置名稱
B. 儲存 DPI 值
C. 定義裝置方向與類型組合
D. 定義不同 layout theme
答案:C
12. 哪個組合代表 mobile landscape?
A. width: compact, height: medium
B. width: expanded, height: compact
C. width: medium, height: expanded
D. width: compact, height: expanded
答案:B
13. 哪個組合代表 tablet portrait?
A. width: medium, height: expanded
B. width: expanded, height: compact
C. width: compact, height: medium
D. width: expanded, height: expanded
答案:A
14. 若設計桌面版 UI,應使用哪種配置?
A. Column 並全寬
B. Row 並權重分配
C. Column 並限制最大寬度
D. 將表單與 header 疊加
答案:C
15. 為何要使用 `widthIn(max = 540.dp)`?
A. 確保小螢幕排版
B. 限制內容最大寬度以防太寬
C. 固定螢幕旋轉
D. 增加元件高度
答案:B
16. 使用 `Modifier.weight(1f)` 的效果是?
A. 固定寬度
B. 分攤空間比例
C. 強制居中
D. 設定固定 margin
答案:B
17. 下列哪個不是建議用於設計自適應 UI 的方法?
A. 使用 weight
B. 使用 fillMaxWidth
C. 使用硬編碼的 dp 值
D. 使用 widthIn
答案:C
18. 對於有凹口的螢幕,應加入什麼?
A. 系統 padding
B. display cutout padding
C. 強制裁切
D. overlay 遮罩
答案:B
19. 哪個類型的 UI 最常需要 scroll?
A. Desktop
B. Tablet landscape
C. Mobile portrait
D. Smartwatch
答案:C
20. 哪個 UI 排列最適合在手機橫向使用?
A. Column + fillMaxWidth
B. Row + equal weight
C. Box + wrapContent
D. LazyColumn
答案:B
21. 要讓內容垂直捲動,應加入什麼 Modifier?
A. scrollable()
B. verticalScroll(rememberScrollState())
C. lazyScroll()
D. horizontalScroll()
答案:B
22. `horizontalAlignment = Alignment.CenterHorizontally` 的效果是?
A. 垂直置中
B. 元件在水平方向置中
C. 水平靠右
D. 垂直置底
答案:B
23. 在哪種裝置上不需要處理裝置方向?
A. 手機
B. 平板
C. 桌機
D. 可摺疊裝置
答案:C
24. 若內容在不同裝置上使用相同邏輯,建議做法是?
A. 重複程式碼
B. 使用多 layout
C. 將共用邏輯抽出
D. 使用硬編碼的判斷式
答案:C
25. 以下哪一個不是 window size class 可處理的維度?
A. Width
B. Height
C. DPI
D. Orientation
答案:C
26. 當遇到 Pixel XL 類型裝置時,其 height class 最可能是?
A. Compact
B. Medium
C. Expanded
D. Undefined
答案:C
27. 為什麼不建議在所有情況都依賴 width size class?
A. 無法取得裝置資訊
B. 容易誤判裝置配置
C. 不能處理橫向
D. 會降低效能
答案:B
28. 若要讓 Header 的對齊方式可變,應如何設計參數?
A. 傳入 string
B. 傳入 Alignment
C. 傳入 Boolean
D. 使用 global var
答案:B
29. 以下哪個不是 `Material 3 adaptive` 的特色?
A. 分類裝置大小
B. 依裝置顯示不同 UI
C. 自動產生 UI
D. 提供寬高分類
答案:C
30. 若要提高不同裝置下 UI 的一致性,最佳方式是?
A. 硬編碼各個 layout
B. 使用相同元件並根據裝置配置調整
C. 針對每個裝置分支設計
D. 僅支援手機直向
答案:B
---
# Terminology
* Jetpack Compose:Android 的現代 UI 工具包,使用聲明式程式設計模型。
* Composable:可組合的 UI 元件,是 Compose 的基本構建單位。
* Modifier:用於改變 Composable 外觀、布局與互動行為的修飾器。
* Column:垂直排列子 Composable 的容器。
* Row:水平排列子 Composable 的容器。
* ConstraintLayout:提供靈活位置控制的布局容器。
* Button:基本的可點擊按鈕元件。
* Text:顯示文字的 Composable。
* Spacer:用於元件間的空白間距。
* RoundedCornerShape:定義具有圓角的形狀。
* MaterialTheme:定義顏色、形狀、字型等 Material Design 風格設定。
* ColorScheme:Material 3 提供的顏色組合。
* Typography:文字樣式的集合。
* OutlineTextField:具邊框樣式的輸入欄位 Composable。
* TextFieldDefaults:設定 TextField 樣式的預設值集合。
* PasswordVisualTransformation:隱藏輸入文字的視覺效果。
* VisualTransformation:定義輸入文字如何顯示的類別。
* remember:Compose 中保存狀態的函式。
* mutableStateOf:建立可變狀態的狀態持有者。
* rememberSaveable:即使重新組合也保留狀態的 API。
* ImageVector:向量圖示資源的類型。
* Icons.Default:Compose 提供的預設圖示集合。
* IconButton:具有點擊行為的圖示按鈕。
* TextStyle:定義文字的樣式,例如字型大小、字重等。
* Shape:定義 UI 元件邊框形狀的介面。
* dp(Density-independent Pixels):獨立於螢幕密度的單位。
* Modifier.fillMaxWidth():讓元件填滿父容器寬度。
* Modifier.height():設定元件的高度。
* Modifier.padding():設定元件的內距。
* contentPadding:定義按鈕等元件中內容與邊界的間距。
* onClick:按鈕點擊時所觸發的行為。
* State Hoisting:將狀態從 Composable 提升至呼叫者以利重用與測試。
* Design System:一致化 UI 元件與樣式的設計標準。
* Material3:Material Design 第三版設計指南與套件。
* CompositionLocalProvider:提供全域設定如主題給子 Composable。
* WindowSizeClass:根據螢幕寬度分類的裝置尺寸類別。
* Compact:WindowSizeClass 中表示窄螢幕的類別(如直立手機)。
* Medium:WindowSizeClass 表示中等寬度(如橫向手機或小平板)。
* Expanded:WindowSizeClass 表示寬螢幕(如平板或桌面)。
* Box:允許重疊排列子 Composable 的容器。
* Surface:具有背景顏色與陰影的容器 Composable。
* ConstraintSet:ConstraintLayout 中的約束定義集合。
* Modifier.weight():分配 Row 或 Column 中空間的比例。
* Modifier.widthIn():限制最小與最大寬度。
* Modifier.align():控制子元件在容器中的對齊方式。
* LocalConfiguration:提供裝置目前設定(如螢幕尺寸、方向)。
* DerivedStateOf:記憶計算狀態以避免不必要 recomposition。
* LaunchedEffect:用於在特定條件下啟動協程。
* rememberUpdatedState:提供最新的狀態值給協程或 effect handlers。
* mutableStateListOf:建立可觀察的 List 狀態容器。
* Modifier.requiredWidth():強制設定寬度,無視父層規則。
* Modifier.maxWidth():設為最大寬度限制。
* Modifier.clip():將元件剪裁為特定形狀。
* Modifier.background():設定元件背景色或圖案。
* Modifier.clickable():讓元件可點擊並處理點擊事件。
* Modifier.testTag():設定元件的測試標籤,用於 UI 測試。
* **Window Size Classes**:根據螢幕寬高將設備分為 Compact、Medium、Expanded 幾種類別,用於實現響應式設計。
* **Compact Width**:表示設備螢幕寬度較窄,通常為手機直向。
* **Medium Width**:表示設備螢幕寬度中等,常見於平板直向。
* **Expanded Width**:表示設備螢幕寬度寬廣,例如平板橫向或桌面裝置。
* **Compact Height**:表示設備高度較小,常見於手機橫向。
* **Medium Height**:設備高度中等,常見於平板。
* **Expanded Height**:設備高度大,如高解析度設備或桌面。
* **Material3 Adaptive**:Jetpack Compose 多平台的適應式設計函式庫。
* **Scaffold**:Compose 中的基礎頁面結構容器,用於支援頂部列、底部列等。
* **WindowInsets**:提供系統 UI 元素(如狀態列、導航列、劉海區)佔用的空間資訊。
* **WindowInsetsPadding**:根據 WindowInsets 提供對應的內距處理。
* **DisplayCutout**:螢幕上的劉海或鏡頭挖孔區域。
* **Row**:Compose 中水平方向排列 Composable 的容器。
* **Column**:Compose 中垂直方向排列 Composable 的容器。
* **Modifier**:Compose 中調整 Composable 外觀與行為的鏈式配置工具。
* **weight()**:分配剩餘空間的相對比重,用於 Row 或 Column 子項。
* **widthIn()**:限制寬度在某個範圍之內。
* **alignment.CenterHorizontally**:在父容器中水平置中對齊。
* **Device Configuration**:定義裝置配置的列舉類別,如手機直向、平板橫向等。
* **when expression**:Kotlin 中的條件分支結構,用於處理多種狀況。
* **rememberScrollState()**:建立一個可用於滾動的記憶狀態。
* **verticalScroll()**:讓 Composable 元件具備垂直滾動能力。
* **horizontalArrangement**:設定 Row 中子元素的水平排列方式。
* **verticalArrangement**:設定 Column 中子元素的垂直排列方式。
* **scaffoldPadding**:從 Scaffold 傳遞下來的內距,用來避免 UI 被系統元件遮住。
* **Composable Function**:使用 @Composable 標記的函數,可在 Compose 中宣告 UI。
* **enum class**:Kotlin 的列舉類別,用來定義固定組合的常數。
* **currentWindowAdaptiveInfo**:從 Material3 Adaptive 函式庫中取得當前視窗適應資訊。
* **fillMaxWidth()**:讓 Composable 寬度填滿可用空間。
* **fillMaxSize()**:讓 Composable 佔滿所有父容器空間。
* **padding(horizontal = x.dp, vertical = y.dp)**:設定左右與上下的內距。
* **modifier.clip(shape)**:將 Composable 裁切為指定形狀。
* **background(color)**:設定 Composable 背景顏色。
* **TextAlign.Center**:文字置中對齊。
* **Alignment.Start**:在父容器中左對齊。
* **Arrangement.spacedBy(x.dp)**:為 Row 或 Column 中的 Composable 元件設定間距。
* **mutableStateOf()**:建立可觀察的可變狀態。
* **remember()**:在組合期間保留狀態資料。
* **OutlineTextField**:具有邊框的輸入欄位元件。
* **TextFieldDefaults.outlinedTextFieldColors()**:設定 OutlineTextField 的顏色樣式。
* **TrailingIcon**:TextField 中尾端的圖示欄位,通常用於密碼可視切換。
* **PasswordVisualTransformation**:將文字轉換為密碼遮蔽符號。
* **visibility / visibilityOff**:切換密碼欄位可見性的圖示。
* **ScaffoldState**:控制 Scaffold 內 Snackbar、Drawer 等狀態的物件。
* **Alignment.Center**:元素於垂直與水平皆置中的對齊方式。
* **Hot Reload**:允許 UI 修改後即時顯示變更而不重啟應用。
* **dp (density-independent pixel)**:與螢幕密度無關的抽象像素單位。
* **App.kt**:Compose Multiplatform 專案的主要進入點程式。
* **BuildConfig**:編譯階段可用的配置變數集合。
* **Launch Device**:在模擬器或實體裝置上啟動應用以測試 UI。
* **Breakpoint**:在響應式設計中,用於切換不同佈局的臨界值。
* **Adaptive Layout**:根據設備特性(如螢幕尺寸)調整佈局以提供更佳使用體驗。
* **Mockup**:設計稿或原型畫面,作為開發 UI 的參考。
* **PaddingValues**:Compose 中表示內距資訊的資料類型。
* **NavigationBarPadding**:為底部導航列提供的預留空間。
* **NestedScroll**:允許內層滾動視圖在外層滾動條件下正常運作的行為處理器。
* **Jetpack Compose Multiplatform**:JetBrains 開發的 Compose UI 框架,用於多平台(Android、Desktop 等)。