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

Android Studio(Java):根据手机模式切换背景颜色

实现日间/夜间模式切换布局背景色

方法一:用Android原生夜间模式(推荐)

Android从API 17开始原生支持夜间模式,系统会自动匹配对应资源,不用手动写太多逻辑。

  1. 创建分模式的颜色资源
    在res目录下新建values-night文件夹,然后在两个目录下分别创建colors.xml:

    • 日间模式(res/values/colors.xml):
      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <color name="bg_color">#FFFFFF</color> <!-- 白色背景 -->
      </resources>
      
    • 夜间模式(res/values-night/colors.xml):
      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <color name="bg_color">#0000FF</color> <!-- 蓝色背景 -->
      </resources>
      
  2. 布局中引用统一颜色名
    给布局根节点设置背景为@color/bg_color,系统会根据当前模式自动加载对应颜色:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/bg_color">
        <!-- 你的其他控件 -->
    </LinearLayout>
    
  3. 代码里切换模式
    在按钮点击或其他触发逻辑里调用系统方法切换模式,Activity会自动重建并加载对应资源:

    // 切换到夜间模式
    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    // 切换到日间模式
    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    // 跟随系统设置的模式
    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
    

方法二:手动管理模式状态(兼容低版本/自定义逻辑)

如果要兼容API 17以下,或者需要自己控制模式的存储逻辑,可以用SharedPreferences保存状态,手动设置背景色。

  1. 保存模式状态
    在切换按钮的点击事件里,记录当前模式并重启Activity生效:

    SharedPreferences sp = getSharedPreferences("mode_config", MODE_PRIVATE);
    boolean isNight = sp.getBoolean("is_night_mode", false);
    // 切换模式状态
    sp.edit().putBoolean("is_night_mode", !isNight).apply();
    // 重启Activity让设置生效
    recreate();
    
  2. 启动时设置背景色
    在Activity的onCreate方法里读取保存的状态,给布局设置对应背景:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        SharedPreferences sp = getSharedPreferences("mode_config", MODE_PRIVATE);
        boolean isNight = sp.getBoolean("is_night_mode", false);
        
        // 获取布局根视图
        View root = findViewById(android.R.id.content);
        if (isNight) {
            root.setBackgroundColor(getResources().getColor(R.color.blue));
        } else {
            root.setBackgroundColor(getResources().getColor(R.color.white));
        }
        // 记得在res/values/colors.xml里定义<color name="white">#FFFFFF</color>和<color name="blue">#0000FF</color>
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:10:37