App夜间模式简单实现

一般资讯类的app都会有夜间模式,方便用户夜晚使用,今天就来说说夜间模式的简单实现。

第一种:简单,方便,不会有页面闪烁。

最简单的方法就是在布局的外层再加一层遮罩,这个遮罩就好比是墨镜,日间模式下遮罩隐藏,当设置夜间模式的时候遮罩显示,就好比用户带了墨镜之后使用app。这种方法是最简单方便的,同时设置之后页面不会闪烁。

第二种:使用自定义属性,需要处理页面闪烁

可能第一种方法局限性比较大,有的夜间模式文字颜色和背景不仅仅只是加遮罩这么简单,可能需要有对比反差,那就用第二种方法:自定义属性

第一步:我们现在attrs里自定义自己需要切换的颜色属性



    
    
    
第二步:在style里自定义Activity的Theme



    
定义了两个style,分别为日间模式和夜间模式,然后给同一个属性附上了不同的颜色值

第三步:在布局文件里,涉及到需要切换的控件时,设置颜色的时候使用我们自定义的属性



    

我们看到在设置View和LinearLayout的背景颜色时使用了"?XXXX",这就是使用我们自定义属性的色值。

第四步:当切换日间和夜间模式的时候,给activity设置Theme。

if (AppRunningContext.isNightMode()) {
                    // 夜间模式
                    setTheme(R.style.NightTheme);
                } else {
                   // 日间模式
                    setTheme(R.style.DayTheme);
                }

这就是用自定义属性来切换日间和夜间模式的步骤。

不过有的人会说为啥设置完成之后没有看到效果呢?那是因为设置完需要重绘activity或者fragment,这样就会造成页面闪烁。那有啥解决的好方法呢?

我提供一种方法:设置界面是一个单独的activity,这个页面没有日间和夜间的区别,在这里点击切换,然后返回到显示的activity就可以了。



你可能感兴趣的:(android,style设置,Android,控件属性,Android技术)