Code Bye

夜间模式切换方案

多日对网易新闻夜间模式的切换的研究都未出结果,不到最后时刻实在是不想通过一个个修改组件颜色。
使用过的方案
通过修改theme——————————–
这个方法是可以修改主题,把背景编程黑色。。。缺陷就是setTheme()以后需要重新setContentView或者重启Activity才能生效。。不知道大家发现没有。这样导致我activity中的内容需要重新加载initView了,界面就刷新了。但是看到网易新闻的效果切换以后页面除了变黑之外没有发生任何变化。。实在是研究不透。。求各路大神提出夜间模式方案。。

先给自己顶个,路过大神提下方案啊。。路过不能错过啊!
10分
可不可以 保存现有Activity数据 然后 加载 不同的布局文件, 找到一个更换布局的方案
在每个Activity 创建的时候 判断是什么模式, 然后加载相应的布局文件 ; 
引用 2 楼 han1202012 的回复:

可不可以 保存现有Activity数据 然后 加载 不同的布局文件, 找到一个更换布局的方案
在每个Activity 创建的时候 判断是什么模式, 然后加载相应的布局文件 ; 

不行啊。你重新加载布局界面肯定会刷新的啊???我的目的切换模式后界面数据不刷新。。

反编译搜狐新闻客户端,看下它这块怎么实现的
10分
夜间模式的几种实现方案:
1.给最外层加个半透明的遮罩层,达到夜间模式的效果(很早之前网易新闻就是这么实现的)
2.保存下数据然后调用setTheme,刷新Activity(糗百实现方法)
3.直接修改View的background,src,textcolor等达到夜间模式的效果(现在网易新闻貌似就是这么弄得)
引用 5 楼 hjywyj 的回复:

夜间模式的几种实现方案:
1.给最外层加个半透明的遮罩层,达到夜间模式的效果(很早之前网易新闻就是这么实现的)
2.保存下数据然后调用setTheme,刷新Activity(糗百实现方法)
3.直接修改View的background,src,textcolor等达到夜间模式的效果(现在网易新闻貌似就是这么弄得)

前两个不适用,第三个是可以,不过感觉很麻烦,不到最好不是很想用这个。。就好像网易新闻那个viewpager里有一个一个的fragment。fragment有listview,activity里怎么怎么获取到viewpager中fragment中的listview呢??然后才能给它设置背景颜色吧??感觉效果是可以的,就是实现起来有的问题

20分
可以不用Theme的方式,
可以定义一个全局的配置,设置不同的颜色作为动态模式,通过代码直接修改字体颜色和背景颜色,网易很多组件都是自定义的复写控件。
当点击夜间模式 就直接修改VIEW的背景颜色和字体。
引用 7 楼 birdsaction 的回复:

可以不用Theme的方式,
可以定义一个全局的配置,设置不同的颜色作为动态模式,通过代码直接修改字体颜色和背景颜色,网易很多组件都是自定义的复写控件。
当点击夜间模式 就直接修改VIEW的背景颜色和字体。

额???这个设置全局配置指的是???不太理解?通过什么方式??

简单的说无非是 修改字体颜色,背景颜色。
setBackground
setColor
你点黑夜模式时 设置统一设置一下颜色,点白天模式时再设置另外一种颜色。
自定义下组件 用invalidate()重绘图形组件。
引用 5 楼 hjywyj 的回复:

夜间模式的几种实现方案:
1.给最外层加个半透明的遮罩层,达到夜间模式的效果(很早之前网易新闻就是这么实现的)
2.保存下数据然后调用setTheme,刷新Activity(糗百实现方法)
3.直接修改View的background,src,textcolor等达到夜间模式的效果(现在网易新闻貌似就是这么弄得)

学习了

引用 9 楼 birdsaction 的回复:

简单的说无非是 修改字体颜色,背景颜色。
setBackground
setColor
你点黑夜模式时 设置统一设置一下颜色,点白天模式时再设置另外一种颜色。
自定义下组件 用invalidate()重绘图形组件。

我用个比较笨的方法,就是把需要改的view放到放到方法day()和night()里。。按钮触发后,根据切换的模式调用不同的方法修改。是这样么???你说的那个invalidate()不太会用。哈哈。。。需要看哪方面的知识么??

请问楼主最后是如何解决夜间模式的切换问题的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明夜间模式切换方案