如何在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
相关产品推荐
相关产品推荐

