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

如何在Unity开发的Android游戏中检测系统深色模式?

Unity Android 同步系统深色模式实现方案

核心思路

通过Unity调用Android原生API读取系统UI模式状态,结合本地存储(PlayerPrefs)处理手动主题与系统主题的优先级,实现UI自动同步。

步骤实现

1. 编写系统深色模式检测方法

直接在Unity的C#代码中调用Android原生类UiModeManager获取系统主题状态:

public static bool IsAndroidDarkModeEnabled()
{
    #if UNITY_ANDROID && !UNITY_EDITOR
    try
    {
        AndroidJavaClass uiModeManagerClass = new AndroidJavaClass("android.app.UiModeManager");
        AndroidJavaObject unityActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
        AndroidJavaObject appContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");
        AndroidJavaObject uiModeManager = appContext.Call<AndroidJavaObject>("getSystemService", "ui_mode");
        
        int nightMode = uiModeManager.Call<int>("getNightMode");
        // MODE_NIGHT_YES对应深色模式开启,值为1
        return nightMode == uiModeManagerClass.GetStatic<int>("MODE_NIGHT_YES");
    }
    catch (System.Exception e)
    {
        Debug.LogError("检测Android深色模式失败:" + e.Message);
        return false;
    }
    #else
    return false;
    #endif
}

2. 初始化时同步主题

优先读取用户手动设置的主题,无手动设置时跟随系统:

void Start()
{
    if (PlayerPrefs.HasKey("SelectedTheme"))
    {
        // 应用用户手动选择的主题
        bool useDarkMode = PlayerPrefs.GetInt("SelectedTheme") == 1;
        ApplyTheme(useDarkMode);
    }
    else
    {
        // 跟随系统主题
        bool useDarkMode = IsAndroidDarkModeEnabled();
        ApplyTheme(useDarkMode);
    }
}

// 替换为你项目中实际的UI主题切换逻辑
void ApplyTheme(bool isDark)
{
    // 示例:切换UI背景、文本颜色、Sprite资源等
    if (isDark)
    {
        // 启用深色UI配置
    }
    else
    {
        // 启用浅色UI配置
    }
    // 保存当前主题设置
    PlayerPrefs.SetInt("SelectedTheme", isDark ? 1 : 0);
    PlayerPrefs.Save();
}

3. 监听系统主题变化(可选)

当游戏从后台回到前台时,重新检测系统主题并同步(仅当用户未手动设置主题时):

void OnApplicationFocus(bool hasFocus)
{
    if (hasFocus && !PlayerPrefs.HasKey("SelectedTheme"))
    {
        bool useDarkMode = IsAndroidDarkModeEnabled();
        ApplyTheme(useDarkMode);
    }
}

注意事项

  • 版本兼容:Android 10(API Level 29)及以上正式支持系统深色模式,低于该版本的设备会默认返回false,可根据需求添加低版本的 fallback 逻辑。
  • 权限说明:无需额外申请权限,读取系统UI模式属于常规系统信息访问。
  • 优先级控制:确保用户手动选择的主题优先级高于系统主题,可在设置界面添加「跟随系统」选项,当用户选择该选项时清除SelectedTheme的PlayerPrefs记录,恢复自动同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:52:28