Implementare un tema Riepilogo

Glance fornisce un'API per gestire il tema a colori. Per altri attributi di stile, come TextStyle, dichiara le variabili di primo livello.

Aggiungi colori

Glance fornisce un'implementazione immediata dei colori del materiale. Per utilizzare il tema integrato, aggrega la tua componibile di primo livello con GlanceTheme, come mostrato nell'esempio seguente.

Sui dispositivi che supportano colori dinamici, questo tema deriva dai colori della piattaforma specifici dell'utente. Su altri dispositivi, viene usato il tema di riferimento Material. Usa GlanceTheme.colors per applicare i colori del tema a capo. Puoi utilizzare questi valori del tema ovunque sia necessario un colore.

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

    provideContent {
        GlanceTheme {
            MyContent()
        }
    }
}

@Composable
private fun MyContent() {

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

    )
}

Per personalizzare il tema, puoi passare colors a GlanceTheme. Glance fornisce la libreria di interoperabilità androidx.glance:glance-material per il Material 2 e il supporto dei colori androidx.glance:glance-material3 per Material 3.

Ad esempio, fornisci i colori dei materiali esistenti della tua app all'API ColorProviders per creare una combinazione di colori Glance, come mostrato nello snippet seguente:

// 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
    )
}

Fornisci i colori dello schema al GlanceTheme che aggrega tutti i componibili, come mostrato nell'esempio seguente:

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),
        // ...
    )
}

Se preferisci utilizzare i colori dinamici dello sfondo (se supportato) e la combinazione di colori della tua app, negli altri casi, puoi trasmettere la combinazione di colori dell'app in GlanceTheme in modo condizionale. Questa informazione è visibile nel seguente snippet:

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),
        // ...
    )
}

Aggiungere forme

Per fornire forme o ombre speciali al widget dell'app, utilizza l'API Android Drawables.

Ad esempio, lo snippet seguente mostra come creare un elemento disegnabile (una forma):

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

Forniscilo al componente componibile di destinazione:

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