You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Compose Desktop中正确使用Material 3主题与组件?

解决Compose Desktop中Material 3组件仍显示Material 2样式的问题

问题背景

我希望在Compose Desktop项目中使用Material 3主题与组件,实现和Android Studio默认空Activity一致的效果——主题、配色方案及各类组件默认采用Material 3样式。参考相关内容添加依赖后,已经能导入Material 3组件,但组件仍然呈现Material 2的样式,按钮与文本框均为旧版样式。

当前build.gradle.kts配置

import org.jetbrains.compose.desktop.application.dsl.TargetFormat

plugins {
    kotlin("jvm")
    id("org.jetbrains.compose")
}

group = "com.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
    google()
}

dependencies {
    implementation(compose.desktop.currentOs)
    implementation(compose.material3)
    implementation(compose.materialIconsExtended)
}

compose.desktop {
    application {
        mainClass = "MainKt"

        nativeDistributions {
            targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
            packageName = "WebViewApp"
            packageVersion = "1.0.0"
        }
    }
}

解决步骤

1. 使用Material 3主题包裹整个界面

Compose Desktop默认不会自动启用Material 3主题,必须手动用material3包下的MaterialTheme包裹所有界面内容,示例代码:

import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.Button
import androidx.compose.runtime.Composable
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application

fun main() = application {
    Window(onCloseRequest = ::exitApplication) {
        // 关键:用Material3主题包裹所有内容
        MaterialTheme {
            Surface {
                Button(onClick = {}) {
                    Text(text = "Material 3 按钮")
                }
            }
        }
    }
}

注意:必须导入androidx.compose.material3.MaterialTheme,而非androidx.compose.material.MaterialTheme(后者为Material 2主题)。

2. 确保组件来自Material 3包

所有需要使用的组件(如Button、TextField等)都要从androidx.compose.material3包导入,而非旧的androidx.compose.material包:

// 正确的Material3组件导入
import androidx.compose.material3.Button
import androidx.compose.material3.OutlinedTextField

如果导入的是Material 2包下的组件,即使加了Material 3依赖,显示的还是旧样式。

3. 验证Compose版本兼容性

确保使用的Compose Desktop版本支持稳定的Material 3特性,建议在plugins中指定最新稳定版:

plugins {
    kotlin("jvm") version "1.9.20"
    id("org.jetbrains.compose") version "1.5.11"
}

版本过低可能导致Material 3样式无法正常生效,同步gradle后重新运行项目即可。

内容的提问来源于stack exchange,提问作者sayang_android

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:07:31