在 Jetpack Compose Glimmer 中,Button 是經過最佳化的互動式元件,可顯示智慧眼鏡輸入內容,並透過狀態提供清楚的視覺回饋,引導使用者操作。
按鈕是以 Jetpack Compose Glimmer 介面系統為基礎建構而成,可自動處理邊框和深度等實體屬性。
標準按鈕包含文字標籤和選用圖示。你可以使用這項功能執行主要或次要動作。此外,還有專用按鈕,例如圖示按鈕和切換按鈕,這些按鈕在 Jetpack Compose Glimmer 中定義為個別元件。
預設
大
圖解
按鈕由容器和標籤組成,並可視需要加入開頭和結尾圖示。
| Part | 說明 |
|---|---|
容器 |
按鈕的背景表面。 |
標籤 |
描述動作的文字。 |
圖示 (選用) |
開頭或結尾的視覺指標。 |
大小
Jetpack Compose Glimmer 按鈕支援兩種大小變化。這些屬性會影響最小高度和內部邊框間距。
| 大小 | 高度下限 | 預設使用政策 |
|---|---|---|
中 |
48.dp |
標準動作和清單 (預設)。 |
大 |
72.dp |
高強調動作或主要畫面進入點。 |
州
Jetpack Compose Glimmer 中的按鈕會變更外觀,以傳達按鈕的狀態。
- 已啟用:互動式按鈕的預設狀態。
- 已聚焦:聚焦時,按鈕會套用
GlimmerTheme.depthEffectLevels.level1和聚焦邊框醒目顯示。 - 已按下:啟用後,系統會在表面套用半透明的白色疊加層。
- 已停用:按鈕不會回應輸入內容,且視覺外觀會調整。
按鈕預設值
標準按鈕適用下列預設值:
- 根據預設,按鈕會使用
GlimmerTheme.typography.bodySmall。請確保按鈕中的文字簡潔明瞭,清楚說明動作。 - 按鈕的預設形狀為
GlimmerTheme.shapes.large。這種一致的圓角設計有助於使用者在顯示眼鏡介面中識別按鈕。
範例:含有文字和圖示的按鈕
基本按鈕只包含文字標籤,但您也可以在文字的開頭 (使用 leadingIcon) 或結尾 (使用 trailingIcon) 新增圖示,提供額外情境資訊。
下列程式碼會建立同時包含開頭和結尾圖示的按鈕:
Button( onClick = { /* Handle navigation or action */ }, leadingIcon = { Icon(FavoriteIcon, contentDescription = null) }, trailingIcon = { Icon(SendIcon, contentDescription = null) } ) { Text("Text Label", style = GlimmerTheme.typography.titleSmall) }
按鈕群組
ButtonGroup 可組合函式可將按鈕分組到可捲動的列中,做為焦點控制器。使用者捲動時,焦點會自動移動,醒目顯示與目前捲動位置對應的按鈕。
範例:按鈕群組
ButtonGroup(modifier = Modifier.fillMaxWidth()) { Button(onClick = {}) { Text("Button 1") } Button(onClick = {}) { Text("Button 2") } Button(onClick = {}) { Text("Button 3") } Button(onClick = {}) { Text("Button 4") } Button(onClick = {}) { Text("Button 5") } }
按鈕群組中的焦點控制項
您可以將焦點移至群組中的任何按鈕,手動控制選取項目。
使用 ButtonGroup 狀態自訂及控管捲動行為:
- 使用
rememberButtonGroupState宣告狀態。 - 並傳遞至
ButtonGroup可組合函式。 - 呼叫
animateScrollToItem(或scrollToItem,用於即時捲動) 即可捲動至特定項目,並自動將焦點移至該項目。
以下程式碼會在點選按鈕時,將焦點從一個按鈕移至另一個按鈕:
val scope = rememberCoroutineScope() val state = rememberButtonGroupState() ButtonGroup(modifier = Modifier.fillMaxWidth(), state = state) { Button(onClick = { scope.launch { state.animateScrollToItem(1) } }) { Text("Select last item") } Button(onClick = { scope.launch { state.animateScrollToItem(0) } }) { Text("Select first item") } }