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

安卓应用如何根据昼夜时间切换Drawable背景?

Android昼夜背景切换实现指南(新手友好版)

Hey 👋,作为Android新手想实现这个功能真的很简单,我给你一步步拆解,每段代码都加了注释,跟着做就行!

1. 准备好昼夜背景资源

首先你得在res/drawable目录下准备两张背景(可以是图片或者xml shape),比如命名为:

  • bg_day.xml(日间背景)
  • bg_night.xml(夜间背景)
    不用纠结格式,普通的png/jpg或者自定义shape都能直接用。

2. 写一个判断昼夜的工具方法

我们需要一个方法来判断当前时间属于日间还是夜间,这里我设定晚上20:00到次日6:00为夜间,你可以根据需求随意调整时间阈值。

可以写一个工具类,比如TimeUtils.java:

import java.util.Calendar;

public class TimeUtils {
    // 判断当前是否为夜间
    public static boolean isNightTime() {
        Calendar calendar = Calendar.getInstance();
        int currentHour = calendar.get(Calendar.HOUR_OF_DAY); // 获取当前小时(24小时制)
        
        // 自定义夜间时间范围:20点到次日6点
        return currentHour >= 20 || currentHour < 6;
    }
}

如果用Kotlin的话,代码会更简洁:

import java.util.Calendar

object TimeUtils {
    fun isNightTime(): Boolean {
        val currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY)
        return currentHour >= 20 || currentHour < 6
    }
}

3. 在Activity/Fragment中设置背景

接下来在页面初始化时(比如onCreate方法里),调用上面的判断方法,给布局设置对应的背景。

先给页面的根布局加个id,比如activity_main_root:

<!-- activity_main.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- 你的其他控件内容 -->
</LinearLayout>

然后在Activity里写逻辑:

Java版本

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 获取根布局实例
        LinearLayout rootLayout = findViewById(R.id.activity_main_root);
        
        // 判断昼夜并切换背景
        if (TimeUtils.isNightTime()) {
            rootLayout.setBackgroundResource(R.drawable.bg_night);
        } else {
            rootLayout.setBackgroundResource(R.drawable.bg_day);
        }
    }
}

Kotlin版本

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.LinearLayout

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val rootLayout = findViewById<LinearLayout>(R.id.activity_main_root)
        
        // 一行代码完成判断与背景设置
        rootLayout.setBackgroundResource(
            if (TimeUtils.isNightTime()) R.drawable.bg_night else R.drawable.bg_day
        )
    }
}

4. 进阶优化(可选)

上面的代码只能在页面启动时判断一次,如果用户在使用过程中跨了昼夜时间点(比如从19:59用到20:01),背景不会自动切换。如果需要实时切换,可以:

  • 用BroadcastReceiver监听系统的ACTION_TIME_TICK广播(每分钟触发一次),每次触发时重新判断并设置背景
  • 或者用WorkManager定时检查时间,比如每小时执行一次判断逻辑

不过作为新手,先把基础功能跑通就好,进阶功能可以之后再慢慢研究~

注意事项

  • 不需要申请任何权限,获取系统时间是Android默认允许的操作
  • 确保根布局的宽高是match_parent,这样背景才能铺满整个屏幕
  • 可以根据自己的需求修改夜间的时间范围,比如改成21:00到5:00

这样就完成啦!如果有哪里看不懂或者跑不起来,随时说~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:09