androidandroid-jetpack-composematerial-components-android

Jetpack Compose Getting Light vs Dark Mode from MaterialTheme Using Material 3


With Jetpack Compose, using Material 2, you can see if a theme is in light mode easily with the following

val light = MaterialTheme.colors.isLight

Using Material 3, I don't see this ability. Is there a way to do this with a Material 3 theme?


Solution

  • Found a solution. Color in Compose has a built in method luminance that returns the relative luminance as a float between 0 and 1. I wrote an extension function for ColorScheme that returns true if the luminance of the background is greater than 0.5.

    @Composable
    fun ColorScheme.isLight() = this.background.luminance() > 0.5
    

    Using it as:

    val isLight = MaterialTheme.colorScheme.isLight()
    

    Now whether the system is in dark mode doesn't matter, only the theme.