Jetpack Compose Glimmer 中的按鈕

適用的 XR 裝置
這份指南可協助您為這類 XR 裝置打造體驗。
顯示眼鏡

在 Jetpack Compose Glimmer 中,Button 是經過最佳化的互動式元件,可顯示智慧眼鏡輸入內容,並透過狀態提供清楚的視覺回饋,引導使用者操作。

按鈕是以 Jetpack Compose Glimmer 介面系統為基礎建構而成,可自動處理邊框和深度等實體屬性。

標準按鈕包含文字標籤和選用圖示。你可以使用這項功能執行主要或次要動作。此外,還有專用按鈕,例如圖示按鈕切換按鈕,這些按鈕在 Jetpack Compose Glimmer 中定義為個別元件。

預設

Jetpack Compose Glimmer 中不同樣式的按鈕範例。這些範例顯示預設中型按鈕,以及三種按鈕狀態:已啟用 (1)、已聚焦 (2) 和已按下 (3)。

Jetpack Compose Glimmer 中不同樣式的按鈕範例。這些範例顯示大型按鈕,並包含三種按鈕狀態:已啟用 (1)、已聚焦 (2) 和已按下 (3)。

圖解

按鈕由容器和標籤組成,並可視需要加入開頭和結尾圖示。

Part 說明

容器

按鈕的背景表面。

標籤

描述動作的文字。

圖示 (選用)

開頭或結尾的視覺指標。

大小

Jetpack Compose Glimmer 按鈕支援兩種大小變化。這些屬性會影響最小高度和內部邊框間距。

大小 高度下限 預設使用政策

48.dp

標準動作和清單 (預設)。

72.dp

高強調動作或主要畫面進入點。

Jetpack Compose Glimmer 中的按鈕會變更外觀,以傳達按鈕的狀態。

  • 已啟用:互動式按鈕的預設狀態。
  • 已聚焦:聚焦時,按鈕會套用 GlimmerTheme.depthEffectLevels.level1 和聚焦邊框醒目顯示。
  • 已按下:啟用後,系統會在表面套用半透明的白色疊加層。
  • 已停用:按鈕不會回應輸入內容,且視覺外觀會調整。

按鈕預設值

標準按鈕適用下列預設值:

範例:含有文字和圖示的按鈕

基本按鈕只包含文字標籤,但您也可以在文字的開頭 (使用 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 狀態自訂及控管捲動行為:

  1. 使用 rememberButtonGroupState 宣告狀態。
  2. 並傳遞至 ButtonGroup 可組合函式。
  3. 呼叫 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")
    }
}