Glance предоставляет API для управления цветовой темой. Для других атрибутов стиля, таких как TextStyle
, объявите переменные верхнего уровня.
Добавить цвета
Glance обеспечивает реализацию цветов материала «из коробки». Чтобы использовать встроенную тему, оберните компоновку верхнего уровня GlanceTheme
, как показано в следующем примере.
На устройствах, поддерживающих динамические цвета, эта тема основана на цветах платформы, специфичных для пользователя. На других устройствах это возвращается к теме базовой линии материала. Используйте 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 предоставляет библиотеку совместимости androidx.glance:glance-material
для Material 2 и androidx.glance:glance-material3
для поддержки цветов Material 3.
Например, предоставьте существующие цвета материала вашего приложения API ColorProviders
, чтобы создать цветовую схему Glance, как показано в следующем фрагменте:
// 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), // ... ) }
Добавить фигуры
Чтобы придать виджету приложения особые формы или тени, используйте API Android Drawables.
Например, в следующем фрагменте показано, как создать объект рисования (фигуру):
<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) )