یک تم Glance را پیاده سازی کنید

Glance یک API برای مدیریت تم رنگی ارائه می دهد. برای سایر ویژگی‌های سبک، مانند TextStyle ، متغیرهای سطح بالا را اعلام کنید.

رنگ ها را اضافه کنید

Glance پیاده سازی رنگ مواد را خارج از جعبه ارائه می دهد. برای استفاده از تم داخلی، همانطور که در مثال زیر نشان داده شده است، سطح بالای قابل ترکیب خود را با 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 کتابخانه قابلیت همکاری androidx.glance:glance-material برای Material 2 و androidx.glance:glance-material3 برای Material 3 را پشتیبانی می کند.

برای مثال، همانطور که در قطعه زیر نشان داده شده است، رنگ های مواد موجود برنامه خود را به 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 Drawables API استفاده کنید.

به عنوان مثال، قطعه زیر نحوه ایجاد یک drawable (یک شکل) را نشان می دهد:

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