Aplikacja Glance udostępnia interfejs API do zarządzania motywem kolorystycznym. W przypadku innych atrybutów stylu, np. TextStyle
, zadeklaruj zmienne najwyższego poziomu.
Dodaj kolory
Aplikacja Glance udostępnia gotowe funkcje kolorów Material Design. Aby użyć wbudowanego motywu, spakuj element kompozycyjny najwyższego poziomu za pomocą właściwości GlanceTheme
, jak pokazano w przykładzie poniżej.
Na urządzeniach, które obsługują dynamiczne kolory, ten motyw jest wybierany na podstawie kolorów platformy właściwych dla użytkownika. Na innych urządzeniach przywracamy motyw podstawowy Material. Użyj właściwości GlanceTheme.colors
, aby dostosować styl za pomocą kolorów z zawijanego motywu. Możesz użyć tych wartości z motywu wszędzie tam, gdzie potrzebujesz koloru.
override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { GlanceTheme { MyContent() } } } @Composable private fun MyContent() { Image( colorFilter = ColorFilter.tint(GlanceTheme.colors.secondary), // ... ) }
Aby dostosować motyw, możesz przekazać colors
do: GlanceTheme
. Glance udostępnia bibliotekę interoperacyjności androidx.glance:glance-material
w przypadku Material 2 i androidx.glance:glance-material3
do obsługi kolorów Material 3.
Na przykład podaj dotychczasowe kolory materiału aplikacji do interfejsu ColorProviders
, aby utworzyć schemat kolorów Glance, jak pokazano w tym fragmencie:
// 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 ) }
Prześlij kolory ze schematu do elementu GlanceTheme
, który uwzględnia wszystkie elementy kompozycyjne, tak jak w tym przykładzie:
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), // ... ) }
Jeśli wolisz użyć dynamicznych kolorów z tapety (jeśli jest ona obsługiwana), a schematu kolorów aplikacji – jeśli tego nie zrobisz, możesz warunkowo przekazać schemat kolorów swojej aplikacji w GlanceTheme
. Widać to w tym fragmencie:
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), // ... ) }
Dodaj kształty
Aby dodać specjalne kształty lub cienie do widżetu aplikacji, użyj interfejsu AndroidDrawables API.
Na przykład ten fragment kodu pokazuje, jak utworzyć obiekt rysowalny (kształt):
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="16dp"/>
<stroke android:color="@color/outline_color" android:width="1dp"/>
</shape>
Podaj go w docelowym elemencie kompozycyjnym:
GlanceModifier.background( imageProvider = ImageProvider(R.drawable.button_outline) )