### 介紹與展示   * 介紹 Material 3 的新元件 Search Bar。 * 點擊 Search Bar 後會展開填滿整個畫面。 * 出現清除文字的圖示。 * 可輸入文字、搜尋、清除文字並收起 Search Bar。 * 搜尋後會新增一筆項目到下拉選單。 --- ### 建立基本 Search Bar * 使用 Scaffold 作為畫面容器。 * Search Bar 需要指定 query、onQueryChange、onSearch、active、onActiveChange 等必要參數。 * 使用 remember 記錄 query 和 active 的狀態。 * onQueryChange 更新輸入文字。 * onSearch 會將 active 設為 false 以關閉搜尋列。 * onActiveChange 控制搜尋列展開與否。 --- ### 版面與樣式設定 * 使用 Modifier.fillMaxWidth() 讓 Search Bar 寬度填滿。 * 加入 placeholder 提示文字。 * 加入 leadingIcon 顯示搜尋圖示。 * 加入 trailingIcon 顯示關閉圖示,點擊後可清除文字或關閉搜尋列。 * 只有當 active 為 true 時才顯示 trailingIcon。 --- ### 下拉內容設定 * 建立 items 狀態作為下拉資料來源,內容為字串列表。 * 在 content 區塊中使用 forEach 顯示每筆資料。 * 每筆資料包含歷史圖示與對應文字。 * 搜尋後會將輸入文字加入 items,並清空輸入欄位。 --- ### 實用邏輯補充 * 清除圖示會根據當前文字狀態進行清除或關閉動作。 * 下拉內容僅為示範用途,實務上應從資料庫載入。 * 可進一步擴充功能,例如與後端同步搜尋紀錄。 ### Terminology * **Composable 函數**:Jetpack Compose 中用於定義 UI 元件的函數,具有 @Composable 標註。 * **Scaffold**:一個提供基本應用程式布局結構的 Compose 元件,如頂部欄、底部欄與內容區域。 * **SearchBar**:Material 3 中的新 UI 元件,提供可互動的搜尋欄功能。 * **MutableState**:一種可變的狀態容器,用於追蹤與觸發 UI 更新。 * **remember**:Compose 的 API,用來保存狀態並在 recomposition 中維持其值。 * **Query**:搜尋欄中輸入的文字內容,通常為一個字串。 * **Active**:布林值,表示搜尋欄目前是否處於展開狀態。 * **onSearch**:當使用者按下鍵盤上的搜尋鍵時觸發的 Lambda 函數。 * **onActiveChange**:處理搜尋欄展開與收起的狀態變更邏輯。 * **Modifier**:Compose 中用來修飾元件(如寬度、填充、點擊事件等)的物件。 * **Placeholder**:搜尋欄中預設顯示的提示文字。 * **Leading Icon**:搜尋欄左側顯示的圖示,通常用於表示搜尋功能。 * **Trailing Icon**:搜尋欄右側的圖示,可用於清除文字或關閉搜尋欄。 * **Shape**:決定元件外觀輪廓的參數,例如圓角形狀。 * **Colors**:搜尋欄中可自訂的色彩屬性。 * **Tonal Elevation**:搜尋欄的陰影層次,影響其浮動感。 * **WindowInsets**:管理應用畫面內邊距的屬性,用以處理系統欄位。 * **InteractionSource**:追蹤與元件互動(如點擊、聚焦)的來源物件。 * **Dropdown Content**:搜尋欄展開後顯示的建議或歷史內容清單。 * **TextFieldValue**:進階版本的輸入欄位狀態,包含游標位置等資料。 * **Icons.Default.Search**:預設搜尋圖示資源。 * **Icons.Default.Close**:預設關閉圖示資源。 * **ImageVector**:向量圖示物件,用於 Compose 中的 Icon 元件。 * **Icon**:Compose 中的圖示顯示元件。 * **Clickable Modifier**:可點擊修飾符,允許為元件添加點擊行為。 * **Text**:顯示純文字的 Compose 元件。 * **Padding**:設定元件內或外邊距。 * **Row**:水平排列的 Layout 容器。 * **ForEach**:用於遍歷集合並生成對應 UI 元件的函數。 * **MutableStateListOf**:支援響應式 UI 更新的可變列表。 * **KeyboardActions**:管理鍵盤操作行為的設定(如搜尋鍵)。 * **ImeAction**:鍵盤上的操作按鍵,如 Search、Done 等。 * **Soft Keyboard**:行動裝置中的虛擬鍵盤。 * **State Hoisting**:將狀態從子組件提升至父組件以利共用與控制。 * **Empty String**:一個內容為空的字串,常用作重置輸入。 * **List**:儲存一系列資料的容器,可用於展示清單資料。 * **Add Function**:將元素新增至集合中的方法。 * **Extended Icons**:擴展版的 Material Icons,可使用更多圖示。 * **History Icon**:代表歷史紀錄的圖示。 * **Recomposition**:當狀態改變時,Compose 自動重新執行 Composable 函數的過程。 * **State Management**:在 UI 中管理狀態更新與同步的技術。 * **Material Design 3**:Google 發表的新一代 UI 設計規範。 * **Jetpack Compose**:Android 的聲明式 UI 框架。 * **UI Components**:構成畫面界面元素的可組合元件。 * **Search Suggestions**:根據輸入文字顯示的相關建議內容。 * **Text Input**:允許使用者輸入文字的元件或行為。 * **Keyboard Dismissal**:操作完成後將虛擬鍵盤收起的行為。 * **Back Button Handling**:使用者按下返回鍵時觸發的行為控制邏輯。 * **Conditional UI Logic**:根據條件動態顯示或隱藏 UI 元件的做法。 * **Clear Functionality**:將輸入文字清除的功能。 * **UI State Restoration**:在配置改變後保留與恢復 UI 狀態的能力。 * **Interaction Feedback**:提供使用者操作時即時回饋的機制。 * **Functional Programming**:Compose 採用的宣告式與函數式程式設計風格。 * **UI Composition**:以組合方式建構畫面 UI 的概念。 * **Live Update**:資料變更時 UI 即時更新的能力。 * **MaterialTheme**:提供主題樣式設定的 Compose 物件。
×
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