Android 夜间模式(白/夜间模式的切换)

3 篇文章 0 订阅
2 篇文章 0 订阅

在这里插入图片描述


在项目研发中,我们避免不了需求中会应用到夜间模式,这里对它做一些总结以及封装


从API 23后,Android就有自带的api能够实现夜间模式与白天模式的切换。
Support Library 23.2(应用于API14+)推出了适合Android Apps的DayNight主题。

废话不多说,看效果:

最后给大家把主要的部分拿出来,供大家参考,结尾有项目下载地址


1. 导入依赖
implementation 'androidx.appcompat:appcompat:1.0.2'
2.修改style文件

将主题改为Theme.AppCompat.DayNight 或者它的子主题。只有这样才支持白夜模式的切换

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

    </style>
</resources>
3.新增夜间模式下的colors文件

App需要在白夜模式下互相切换,所以需要两套的颜色资源文件

(1) values >>> colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#009688</color>
    <color name="colorPrimaryDark">#03A9F4</color>
    <color name="colorAccent">#009688</color>

    <color name="blue">#03A9F4</color>

    <color name="viewColorPrimary">#ffffff</color>
    <color name="txtColor">#212121</color>
    <color name="viewBackground">#03A9F4</color>
    <color name="tabColor">#F7F7F7</color>
    <color name="tabTxtColor">#bfbfbf</color>
    <color name="txtFragment">#03A9F4</color>
    <color name="fragmentBlock">#03A9F4</color>
</resources>

(2) values-night >>> colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#35464e</color>
    <color name="colorPrimaryDark">#212121</color>
    <color name="colorAccent">#ffffff</color>

    <color name="viewColorPrimary">#212121</color>
    <color name="txtColor">#ffffff</color>
    <color name="viewBackground">#303030</color>
    <color name="tabColor">#303030</color>
    <color name="tabTxtColor">#ffffff</color>
    <color name="txtFragment">#ffffff</color>
    <color name="fragmentBlock">#009688</color>
</resources>
4.切换模式

这里我是在抽的Activity基类里面写的。基类继承AppCompatActivity

MainActivity中的应用

总结

到这里就已经结束了,欢迎大家留言探讨!
下载地址:Android 模式切换

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要在 Android 中注册监听白天黑夜切换,可以使用 `TimeChangedBroadcastReceiver` 和 `UiModeManager` 两个类。 首先,创建一个 `TimeChangedBroadcastReceiver` 类,继承自 `BroadcastReceiver`,并重写 `onReceive` 方法。在该方法中,获取当前系统时间,并根据时间判断当前是天还是黑夜。 ```java public class TimeChangedBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 获取当前时间 Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); // 判断天还是黑夜 if (hour >= 6 && hour < 18) { // 天 setUiMode(context, UiModeManager.MODE_NIGHT_NO); } else { // 黑夜 setUiMode(context, UiModeManager.MODE_NIGHT_YES); } } // 设置 UI 模式 private void setUiMode(Context context, int uiMode) { UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE); uiModeManager.setNightMode(uiMode); } } ``` 接下来,在 `AndroidManifest.xml` 中注册广播接收器。 ```xml <receiver android:name=".TimeChangedBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.TIME_SET" /> <action android:name="android.intent.action.TIMEZONE_CHANGED" /> </intent-filter> </receiver> ``` 最后,在需要监听白天黑夜切换的 Activity 中,注册广播接收器。 ```java public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private TimeChangedBroadcastReceiver timeChangedBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 注册广播接收器 intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_TIME_CHANGED); intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); timeChangedBroadcastReceiver = new TimeChangedBroadcastReceiver(); registerReceiver(timeChangedBroadcastReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); // 取消注册广播接收器 unregisterReceiver(timeChangedBroadcastReceiver); } } ``` 这样,当系统时间发生变化时,广播接收器就会收到通知,并根据当前时间切换天或黑夜模式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值