美文网首页Android开发Android知识程序员
超简单的 Android夜晚模式实现

超简单的 Android夜晚模式实现

作者: 不识水的鱼 | 来源:发表于2017-10-31 13:41 被阅读198次

    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夜晚模式实现

        本文链接:https://www.haomeiwen.com/subject/iukbpxtx.html