kotlin 更改背景颜色表面亮/暗jetpack组合

j2cgzkjk  于 2023-01-09  发布在  Kotlin
关注(0)|答案(4)|浏览(214)

我试着从jetpack组合开始,它变得越来越复杂,能够根据用户选择的主题(浅暗)自动改变背景。
我正在编辑theme.kt中的颜色

private val DarkColorScheme = darkColorScheme(
primary = Purple80,
secondary = PurpleGrey80,
tertiary = Pink80,
surface = Color(0xFF0BB000),
background = Color(0xFF0BB000),
onBackground = Color(0xFF0BB000))

问题是,当我运行应用程序时,背景色仍然是灰色的。
我认为问题是我的应用程序没有从主题中获取颜色,因为我试图直接设置它,但它也没有改变背景色。

Surface ( color = MaterialTheme.colorScheme.background)

如果有人知道为什么它不自动变色并告诉我,我将不胜感激。
我可以从我的活动中再次设置调色板并更改它,这取决于用户选择的模式,但这不是一个最优的解决方案,看起来很难看。
我离开我的活动。kt

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        TruequeGualeguaychuTheme {
            Surface ( color = MaterialTheme.colorScheme.background){
                Text(
                    modifier = Modifier
                        .fillMaxSize()
                        .wrapContentHeight(),
                    textAlign = TextAlign.Center,
                    text = "Hello Android!",
                )
            }
        }
    }
}

}
它应该有一个绿色背景,但它没有采用中声明的颜色(background = Color(0xFF0BB000))

kuuvgm7e

kuuvgm7e1#

我以前也实现过类似的功能,不过是在Jb-compose桌面,请参考:
MainApp.kt:

@OptIn(ExperimentalMaterialApi::class)
@Composable
@Preview
fun launchApp() {
  MaterialTheme(
    colors = darkColors(
                primary = MyColor.primaryColor,
                primaryVariant = MyColor.primaryColor,
                secondary = MyColor.primaryColor,
                secondaryVariant = MyColor.primaryColor,
                background = MyColor.darkBackgroundColor,
                surface = MyColor.darkBackgroundColor,
                onPrimary = Color.White,
                onSecondary = Color.White,
                onBackground = Color.White,
                onSurface = Color.White,
                error = Color.Red,
                onError = Color.White
            ),
        ){
           //...
                 }
}

Main.kt:

fun main(args: Array<String>) = application {
    Window(
        onCloseRequest = ::exitApplication,
        icon = painterResource("icon/xx.ico"),
        title = "xx ${RuntimeContext.APP_VERSION}",
    ) {
        MainApp.launchApp()

    }
}

我希望这对你有帮助。

ogq8wdun

ogq8wdun2#

第一个月
可以创建如下颜色,并在曲面背景色中使用该颜色。

Surface(modifier = Modifier
        .fillMaxSize()
        .background(color = MaterialTheme.colors.myBackgroundColor)) {
// your code 
}
q8l4jmvw

q8l4jmvw3#

看起来你遗漏的部分是@vaspike的答案中暗示的。所有应该使用你的自定义主题的视图都应该从主题的示例中派生出来。例如:

@Composable
fun MyTheme(content: @Composable () -> Unit) {
    MaterialTheme(
        colors = LightColors, // A list of key/values I define.
        content = content
    )
}

@Composable
fun HomePage(){
    MyTheme(){
        // composables that use the theme.
    }
}

这来自www.example.com上的示例https://developer.android.com/codelabs/jetpack-compose-theming#3

nbewdwxp

nbewdwxp4#

问题是新版本的android有动态颜色,使用基于系统的调色板,默认情况下,主题有这个选项激活,这限制了一个人可以设置调色板。

dynamicColor: Boolean = true

相关问题