Glance 提供了一个 API 来管理颜色主题。对于其他样式属性,例如 TextStyle
,请声明顶级变量。
添加颜色
Glance 提供了开箱即用的 Material 颜色实现。要使用内置主题,请将您的顶级可组合项包装在 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
。
例如,将您应用现有的 Material 颜色提供给 ColorProviders
API 以创建 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), // ... ) }
添加形状
要为您的应用小部件提供特殊的形状或阴影,请使用 Android 可绘制对象 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) )