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

如何在Jetpack Compose(Material3)应用中设置ForceDarkAllowed为false

在Jetpack Compose(Material3)中禁用ForceDarkAllowed

方法1:通过主题配置(无styles.xml也可快速创建)

如果项目没有styles.xml,可以手动创建并配置:

  1. 在res/values目录下新建styles.xml文件
  2. 定义应用主题,添加android:forceDarkAllowed属性并设为false:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.Material3.DayNight.NoActionBar">
        <item name="android:forceDarkAllowed">false</item>
    </style>
</resources>
  1. 在AndroidManifest.xml中为Activity指定这个主题:
<activity
    android:name=".MainActivity"
    android:theme="@style/AppTheme">
    <!-- 其他配置项 -->
</activity>

此方式会全局禁用当前Activity的强制深色模式。

方法2:在Compose中获取View调用setForceDarkAllowed

利用Compose的LocalView获取当前关联的View实例,在合适时机执行设置:

@Composable
fun MainScreen() {
    val currentView = LocalView.current
    LaunchedEffect(Unit) {
        currentView.setForceDarkAllowed(false)
    }
    
    // 你的Material3界面内容
    Scaffold { paddingValues ->
        // ...
    }
}

LaunchedEffect(Unit)确保代码仅在Compose首次初始化时执行一次,避免重复调用。

方法3:在Activity中直接操作根View

如果Activity通过setContent加载Compose,可直接操作窗口的根View实现全局禁用:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyAppTheme {
                // 你的Material3主题与界面
            }
        }
        // 禁用整个窗口的强制深色模式
        window.decorView.setForceDarkAllowed(false)
    }
}

注意:若仅需给局部Compose组件禁用,方法2更灵活;全局禁用则优先选择方法1或3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:52:08