超简单的 Android夜晚模式实现

Android夜晚模式实现

github 源码下载

上图


S71031-13270753.jpg

超简单的实现白天夜晚模式,前提是都是Android高版本的系统。当然相信现在适配的大多数已经是高版本的系统了,4.4的一般也不会适配了吧

    compile 'com.android.support:appcompat-v7:25.+'

相信你不会低于这个包吧'Activity'才会继承'AppCompatActivity'

其实方法很简单就是一个方法就可以实现

private void setNightMode() {
        //  获取当前模式
        int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
        //  将是否为夜间模式保存到SharedPreferences
        //  切换模式
        getDelegate().setDefaultNightMode(isNight ?
                AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES);

        //  重启Activity
        recreate();
    }

    public void change(View view) {
        setNightMode();
        isNight=!isNight;
    }

如上所示

getDelegate().setDefaultNightMode(isNight ?
                    AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES);

其实就是这个方法起的作用,当你调用这个方法的时候,系统就会相应的切换到你所需要的模式,前期你需要做一些简单的配置。如下:

新建values-night目录,如下:

在这里面新建一个values-night,在res 目录下。在values-night新建一个colors.xml

接下来只需要在对应的colors文件下写不同的颜色值(夜间颜色值和白天颜色值)即可。至此关于实现夜间模式的配置已经基本完成。

'AppCompatDelegate.setDefaultNightMode(mode)',其中mode有一下四个值:

 MODE_NIGHT_NO: 亮色(light)主题,不使用夜间模式
 MODE_NIGHT_YES:暗色(dark)主题,使用夜间模式
 MODE_NIGHT_AUTO:根据当前时间自动切换 亮色(light)/暗色(dark)主题(22:00-07:00时间段内自动切换为夜间模式)
 MODE_NIGHT_FOLLOW_SYSTEM(默认选项):设置为跟随系统,通常为MODE_NIGHT_NO         

这个时候,只需要你调用之前的方法就可以实现了。 'getDelegate().setDefaultNightMode(isNight ? AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES);'

第二次进入这个页面就可以实现主题的更换了。

有些手机自定义了Activity的进入方式的,不会出现闪动,但是有些手机就会出现闪动。可以使用'Activity'的转场动画,过度,点击之后finish掉

Intent intent = new Intent(this, MainActivity.class);
            intent.putExtra("nightMode", true);
            startActivity(intent);
            overridePendingTransition(R.anim.animo_alph_close, R.anim.activity_close);

这样实现不会闪动的效果

其次就是全局的夜间模式了,可以在自己的MyApplication里面实现,把我们的设置保存在SharePresference里面,在MyApplication里面调用

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
// 获取到SharePresference里面的boolean值,判断使用那种模式
//        AppCompatDelegate.setDefaultNightMode(false ?
//                AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO);
    }
}

这里需要自己判断,这样你新开的页面就会是你需要的模式了。

还可以写一个'BaseActivity',所有的'Activity'都要继承它,这里就自己慢慢琢磨吧。提供一种思路而已,应该也能实现全局的模式切换

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,609评论 25 709
  • 夜幕降临,他走在马路上,回想着今天发生的一切,他不敢相信事情就这样发生了。他最终还是决定拨打那个电话,掏出手机,解...
    章鱼老王阅读 13,299评论 9 49
  • 博文出处:对于Android日夜间模式实现的探讨,欢迎大家关注我的博客,谢谢!0x0001====== 关于 An...
    俞其荣阅读 13,653评论 16 74
  • “它一定是认为,自己必能靠着这样,找出自由的缺口。 它们并不知道围栏旁的另一侧,不是自由,只是另一个围墙的开端。”...
    新月饭店大小姐阅读 3,240评论 0 0
  • 闲居的周末,少年在做他的功课,放了瑜伽音乐,少年说他喜欢《青春修炼手册》,便这首歌单曲循环一个早晨。 四月的时候带...
    陌上花开_ab82阅读 1,118评论 0 0