實作 Glance 主題

Glance 提供 API 來管理色彩主題。如果是其他樣式屬性 (例如 TextStyle),請宣告頂層變數。

新增顏色

Glance 提供立即可用的 Material Design 顏色實作。如要使用內建主題,請使用 GlanceTheme 包裝頂層可組合項,如下列範例所示。

在支援動態色彩的裝置上,這個主題衍生自使用者專屬的平台顏色。在其他裝置上,則會改用 Material 基準主題。透過 GlanceTheme.colors 使用已包裝主題中的顏色設定樣式。您可以在需要顏色的任意位置使用主題中的這些值。

override suspend fun provideGlance(context: Context, id: GlanceId) {

    provideContent {
        GlanceTheme {
            MyContent()
        }
    }
}

@Composable
private fun MyContent() {

    Image(
        colorFilter = ColorFilter.tint(GlanceTheme.colors.secondary),
        // ...

    )
}

如要自訂主題,您可以將 colors 傳遞至 GlanceTheme。Glance 提供 Material 2 的 androidx.glance:glance-material 互通性程式庫,以及 Material 3 顏色支援的 androidx.glance:glance-material3。

舉例來說,您可以將應用程式現有的質感設計顏色提供給 ColorProviders API,建立資訊一覽色彩配置,如以下程式碼片段所示:

// Remember, use the Glance imports
// import androidx.glance.material3.ColorProviders

// Example Imports from your own app
// import com.example.myapp.ui.theme.DarkColors
// import com.example.myapp.ui.theme.LightColors

object MyAppWidgetGlanceColorScheme {

    val colors = ColorProviders(
        light = LightColors,
        dark = DarkColors
    )
}

將配置中的顏色提供給包裝所有可組合項的 GlanceTheme,如以下範例所示:

override suspend fun provideGlance(context: Context, id: GlanceId) {
    // ...

    provideContent {
        GlanceTheme(colors = MyAppWidgetGlanceColorScheme.colors) {
            MyContent()
        }
    }
}

@Composable
private fun MyContent() {

    Image(
        colorFilter = ColorFilter.tint(GlanceTheme.colors.secondary),
        // ...
    )
}

如果您偏好在支援時使用桌布的動態色彩,否則使用應用程式的色彩配置,則可以在 GlanceTheme 中有條件地傳遞應用程式的色彩配置。如以下程式碼片段所示:

override suspend fun provideGlance(context: Context, id: GlanceId) {

    provideContent {
        GlanceTheme(
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
                GlanceTheme.colors
            else
                MyAppWidgetGlanceColorScheme.colors
        ) {
            MyContent()
        }
    }
}

@Composable
private fun MyContent() {
    // ...
    Image(
        colorFilter = ColorFilter.tint(GlanceTheme.colors.secondary),
        // ...
    )
}

新增形狀

如要為應用程式小工具提供特殊形狀或陰影,請使用 Android Drawables API。

舉例來說,下列程式碼片段說明如何建立可繪項目 (形狀):

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="16dp"/>
    <stroke android:color="@color/outline_color" android:width="1dp"/>
</shape>

提供給目標可組合項:

GlanceModifier.background(
    imageProvider = ImageProvider(R.drawable.button_outline)
)