切换夜间模式

Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)

首先来个最简单的一键切换主题功能,就做个白天和晚上的主题好了。

先看我们的styles文件:

1 <resources>
 2 
 3     
 4     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5         
 6         @color/colorPrimary
 7         @color/colorPrimaryDark
 8         @color/colorAccent
 9     style>
10     <style name="AppTheme.NoActionBar">
11         false
12         true
13     style>
14     <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
15     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

夜间模式

 -- 夜间模式 -->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

上述只是完成了在应用启动时,读取本地配置信息,回显至客户端。

而真正的点击设置是在侧滑菜单NavigationDrawerFragment中完成的

NavigationDrawerFragment中通过ButterKnife注解找见menu_item_theme

 @InjectView(R.id.menu_item_theme)
    View mMenu_item_theme;
  • 1
  • 2

添加注册监听后

case R.id.menu_item_theme:
        //点击完成模式的切换
     switchTheme();
     break;
  • 1
  • 2
  • 3
  • 4

真正的模式切换代码:

先读取本地配置信息 
如果是夜间,点击后设置为日间模式 
如果是日间,点击后设置位夜间模式 
随后recreate 当前Activity

    private void switchTheme() {
        if (AppContext.getNightModeSwitch()) {
            AppContext.setNightModeSwitch(false);
        } else {
            AppContext.setNightModeSwitch(true);
        }

        if (AppContext.getNightModeSwitch()) {
            getActivity().setTheme(R.style.AppBaseTheme_Night);
        } else {
            getActivity().setTheme(R.style.AppBaseTheme_Light);
        }

        getActivity().recreate();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、总结收获

明白了应用中各种皮肤、模式切换的原理,实质还是——theme

0
 
2
 
 

我的同类文章

读源码&学技术(7)
  • 开源中国源码学习(八)——枚举类2015-09-07阅读525
  • 开源中国源码学习(六)——ButterKnife的使用2015-08-11阅读8592
  • 开源中国源码学习(三)——Log日志上传2015-08-06阅读992
  • 开源中国源码学习(一)——简介2015-08-05阅读1234
  • 开源中国源码学习(七)——DrawerLayout使用2015-08-12阅读683
  • 开源中国源码学习(四)——主界面总体认识2015-08-10阅读674
  • 开源中国源码学习(二)——Splash界面2015-08-05阅读1279
猜你在找
数据结构(C版)
Java之路
MySQL入门到精通(偏性能调优方向)【小强测试出品】
零基础学Java系列从入门到精通
软件测试基础
夜间模式切换setTheme
开源中国源码学习UI篇三之ViewPager+Fragment的使用分析
开源中国源码学习数据篇一之android-async-http框架和AsyncTask
开源中国安卓客户端源码学习一 渐变启动界面
开源中国源码学习UI篇一之FragmentTabHost的使用分析
id="iframeu1607657_0" src="http://pos.baidu.com/kcxm?sz=728x90&rdid=1607657&dc=2&di=u1607657&dri=0&dis=0&dai=2&ps=4106.370363829395x374&coa=at%3D3%26rsi0%3D728%26rsi1%3D90%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1469103898466&ti=%E5%BC%80%E6%BA%90%E4%B8%AD%E5%9B%BD%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%BA%94%EF%BC%89%E2%80%94%E2%80%94%E5%88%87%E6%8D%A2%E7%9A%AE%E8%82%A4%EF%BC%88%E6%97%A5%E9%97%B4%E6%A8%A1%E5%BC%8F%E5%92%8C%E5%A4%9C%E9%97%B4%E6%A8%A1%E5%BC%8F%EF%BC%89%20-%20ZhangGeng%27s%20Blog%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSD&ari=2&dbv=2&drs=3&pcs=1406x714&pss=1407x4932&cfv=0&cpl=20&chi=3&cce=true&cec=UTF-8&tlm=1469103898&rw=715<u=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fdetails%2F47392949<r=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fcategory%2F5709555&ecd=1&psr=1920x1080&par=1920x1032&pis=-1x-1&ccd=24&cja=false&cmi=26&col=zh-CN&cdo=-1&tcn=1469103898&qn=16e1b924f17c035e&tt=1469103898438.34.127.132" width="728" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
查看评论
1楼  Wangpan20162016-06-22 11:47发表 [回复]
有Demo给发一个,部分代码有些看不懂了
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
全部主题  Hadoop  AWS  移动游戏  Java  Android  iOS  Swift  智能硬件  Docker  OpenStack  VPN  Spark  ERP  IE10  Eclipse  CRM  JavaScript  数据库  Ubuntu  NFC  WAP  jQuery  BI  HTML5  Spring  Apache  .NET  API  HTML  SDK  IIS  Fedora  XML  LBS  Unity  Splashtop  UML  components  Windows Mobile  Rails  QEMU  KDE  Cassandra  CloudStack  FTC  coremail  OPhone  CouchBase  云计算  iOS6  Rackspace  Web App  SpringSide  Maemo  Compuware  大数据  aptech  Perl  Tornado  Ruby  Hibernate  ThinkPHP  HBase  Pure  Solr  Angular  Cloud Foundry  Redis  Scala  Django  Bootstrap
  • 个人资料
  •  
    张庚
     
    • 访问:317687次
    • 积分:4827
    • 等级: 
    • 排名:第3893名
    • 原创:193篇
    • 转载:34篇
    • 译文:14篇
    • 评论:61条
  • 关于
  • GitHub地址: https://github.com/SOFTPOWER1991
  • 个人博客:
  • www.zhanggeng.me
  • 文章分类
  • C(9)
  • 结构与算法(1)
  • 学习计划(2)
  • Java(51)
  • JavaWeb(1)
  • Java多线程(11)
  • Android(95)
  • 设计模式(2)
  • 正则表达式(2)
  • Linux(22)
  • Python(18)
  • 版本控制(18)
  • UML(1)
  • 项目点滴(26)
  • android-studio(7)
  • 软件工程(1)
  • Android性能优化(8)
  • JNI/NDK(1)
  • Vim(1)
  • 读源码&学技术(8)
  • 测试(11)
  • 文章存档
    • 2016年05月(11)
    • 2016年03月(3)
    • 2016年02月(3)
    • 2016年01月(6)
    • 2015年12月(3)
      展开
  • 阅读排行
  • Android Studio 主题、字体大小的设置(25422)
  • LeakCanary——直白的展现Android中的内存泄露(22967)
  • Android客户端与服务器交互中的token(16444)
  • android:exported 属性详解(16058)
  • 如何拿到Spinner的当前值,并实时传递至TextView中显示(11731)
  • Android Studio 中如何更改SDK路径(9347)
  • 开源中国源码学习(六)——ButterKnife的使用(8587)
  • 去掉ExpandableListView前的向下箭头(8553)
  • 基本数据类型包装类(7518)
  • 如何查看Android设备的CPU架构信息(5925)
  • 推荐文章
    • *Android RocooFix 热修复框架
    • * android6.0源码分析之Camera API2.0下的初始化流程分析
    • *Android_GestureDetector手势滑动使用
    • *Android MaterialList源码解析
    • *Android开源框架Universal-Image-Loader基本介绍及使用
    • *Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
  • 最新评论
  • Android客户端与服务器交互中的token

    江军祥: 求源码[email protected]

  • Android客户端与服务器交互中的token

    江军祥: 请问你将数据存储在session中 ,session过期时间是怎么处理的

  • Python学习九:列表生成式

    张庚: 呵呵。我在第一篇中,已经写的很明白了,这是我在学习廖雪峰老师的学习笔记。还有,我要不要脸,不重要,你...

  • Python学习九:列表生成式

    张庚: 呵呵。我在第一篇中,已经写的很明白了,这是我在学习廖雪峰老师的学习笔记。还有,我要不要脸,不重要,你...

  • Python学习九:列表生成式

    冯西的技术博客: 这个真的是原创吗?好不要脸。

  • 开源中国源码学习(六)——ButterKnife的使用

    qq_28463783: 谢谢楼主分享~

  • LeakCanary——直白的展现Android中的内存泄露

    21323: Error:(18) Error retrieving parent for item: No re...

  • 开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)

    Wangpan2016: 有Demo给发一个,部分代码有些看不懂了

  • LeakCanary——直白的展现Android中的内存泄露

    CodingForAndroid: 不错!!

  • 向每一个错误致敬——Android HotFix

    aplixy: 亲测可用,谢谢分享,比那个什么HotFix之类的好用多了,给力



在开源中国客户端源码的侧滑菜单栏里有一个模式切换的选项,可以完成夜间模式日间模式的相互转换。

一、功能介绍

在侧滑菜单栏里点击日间或者夜间后,客户端的皮肤可以发生变化,来达到保护眼睛的作用。

二、详细介绍

这是在MainActivity的onCreate方法中的一段代码,这段代码完成了读取本地配置中存储的日间模式和夜间模式信息,从而回显到客户端中。

读取本地配置信息,在应用启动时,回显至客户端

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (AppContext.getNightModeSwitch()) {
            setTheme(R.style.AppBaseTheme_Night);
        } else {
            setTheme(R.style.AppBaseTheme_Light);
        }

        ......
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在上面代码中可以看到,各种皮肤的信息还是在Style中进行配置的

日间模式代码

   -- 日间模式 -->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

夜间模式

 -- 夜间模式 -->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

上述只是完成了在应用启动时,读取本地配置信息,回显至客户端。

而真正的点击设置是在侧滑菜单NavigationDrawerFragment中完成的

NavigationDrawerFragment中通过ButterKnife注解找见menu_item_theme

 @InjectView(R.id.menu_item_theme)
    View mMenu_item_theme;
  • 1
  • 2

添加注册监听后

case R.id.menu_item_theme:
        //点击完成模式的切换
     switchTheme();
     break;
  • 1
  • 2
  • 3
  • 4

真正的模式切换代码:

先读取本地配置信息 
如果是夜间,点击后设置为日间模式 
如果是日间,点击后设置位夜间模式 
随后recreate 当前Activity

    private void switchTheme() {
        if (AppContext.getNightModeSwitch()) {
            AppContext.setNightModeSwitch(false);
        } else {
            AppContext.setNightModeSwitch(true);
        }

        if (AppContext.getNightModeSwitch()) {
            getActivity().setTheme(R.style.AppBaseTheme_Night);
        } else {
            getActivity().setTheme(R.style.AppBaseTheme_Light);
        }

        getActivity().recreate();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、总结收获

明白了应用中各种皮肤、模式切换的原理,实质还是——theme


 收藏    纠错
推荐文章
  • 1. Google I/O 2016 笔记之Layout新世界-ConstraintLayout
  • 2. 揭秘:国内一线互联网公司内部面试题库
  • 3. Google I/O 2016 笔记之Espresso 进阶
  • 4. 微信热更新方案 Tinker_imitator 实践篇 + 原理篇
  • 5. 酷炫的碎纸机Android版
  • 6. 一个优雅实用的Submit按钮动效
相关推刊














  • by kosl90《移动开发》91
  • by Scorpio丶God《android》141
  • 《匿名收藏》146
我来评几句
登录后评论

已发表评论数(1)

拉弓的松鼠在旋转 04-02 23:42
有源码么,谢谢分享!!!!

相关站点

博客园精华区
+订阅
热门文章
  • 1. 揭秘:国内一线互联网公司内部面试题库
  • 2. 微信热更新方案 Tinker_imitator 实践篇 + 原理篇
  • 3. Android 三种播放视频的方式
  • 4. Architecting Android…The evolution
  • 5. 酷炫的碎纸机Android版














【公告】博客系统优化升级      【收藏】Html5 精品资源汇集      前端开发人员必须了解的七大技能图谱    
id="cpro_u2392861_iframe" src="http://pos.baidu.com/kcxm?sz=300x250&rdid=2392861&dc=2&di=u2392861&dri=0&dis=0&dai=1&ps=1073.3703638293944x1395&coa=at%3D3%26rsi0%3D300%26rsi1%3D250%26pat%3D17%26tn%3DbaiduCustNativeAD_xuanfu%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D14%26rss2%3D%2523000000%26titSU%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1469103898466&ti=%E5%BC%80%E6%BA%90%E4%B8%AD%E5%9B%BD%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%BA%94%EF%BC%89%E2%80%94%E2%80%94%E5%88%87%E6%8D%A2%E7%9A%AE%E8%82%A4%EF%BC%88%E6%97%A5%E9%97%B4%E6%A8%A1%E5%BC%8F%E5%92%8C%E5%A4%9C%E9%97%B4%E6%A8%A1%E5%BC%8F%EF%BC%89%20-%20ZhangGeng%27s%20Blog%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSD&ari=2&dbv=2&drs=3&pcs=1406x714&pss=1407x4932&cfv=0&cpl=20&chi=3&cce=true&cec=UTF-8&tlm=1469103898&rw=715<u=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fdetails%2F47392949<r=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fcategory%2F5709555&ecd=1&psr=1920x1080&par=1920x1032&pis=-1x-1&ccd=24&cja=false&cmi=26&col=zh-CN&cdo=-1&tcn=1469103898&qn=963bee2fea02b0c9&tt=1469103898438.32.94.99" width="300" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
关闭
 

开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)

  2085人阅读  评论(1)  收藏  举报
  分类:
 
读源码&学技术(7) 

目录(?)[+]

在开源中国客户端源码的侧滑菜单栏里有一个模式切换的选项,可以完成夜间模式日间模式的相互转换。

一、功能介绍

在侧滑菜单栏里点击日间或者夜间后,客户端的皮肤可以发生变化,来达到保护眼睛的作用。

二、详细介绍

这是在MainActivity的onCreate方法中的一段代码,这段代码完成了读取本地配置中存储的日间模式和夜间模式信息,从而回显到客户端中。

读取本地配置信息,在应用启动时,回显至客户端

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (AppContext.getNightModeSwitch()) {
            setTheme(R.style.AppBaseTheme_Night);
        } else {
            setTheme(R.style.AppBaseTheme_Light);
        }

        ......
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在上面代码中可以看到,各种皮肤的信息还是在Style中进行配置的

日间模式代码

   -- 日间模式 -->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

夜间模式

 -- 夜间模式 -->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

上述只是完成了在应用启动时,读取本地配置信息,回显至客户端。

而真正的点击设置是在侧滑菜单NavigationDrawerFragment中完成的

NavigationDrawerFragment中通过ButterKnife注解找见menu_item_theme

 @InjectView(R.id.menu_item_theme)
    View mMenu_item_theme;
  • 1
  • 2

添加注册监听后

case R.id.menu_item_theme:
        //点击完成模式的切换
     switchTheme();
     break;
  • 1
  • 2
  • 3
  • 4

真正的模式切换代码:

先读取本地配置信息 
如果是夜间,点击后设置为日间模式 
如果是日间,点击后设置位夜间模式 
随后recreate 当前Activity

    private void switchTheme() {
        if (AppContext.getNightModeSwitch()) {
            AppContext.setNightModeSwitch(false);
        } else {
            AppContext.setNightModeSwitch(true);
        }

        if (AppContext.getNightModeSwitch()) {
            getActivity().setTheme(R.style.AppBaseTheme_Night);
        } else {
            getActivity().setTheme(R.style.AppBaseTheme_Light);
        }

        getActivity().recreate();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、总结收获

明白了应用中各种皮肤、模式切换的原理,实质还是——theme

0
 
2
 
 

我的同类文章

读源码&学技术(7)
  • 开源中国源码学习(八)——枚举类2015-09-07阅读525
  • 开源中国源码学习(六)——ButterKnife的使用2015-08-11阅读8592
  • 开源中国源码学习(三)——Log日志上传2015-08-06阅读992
  • 开源中国源码学习(一)——简介2015-08-05阅读1234
  • 开源中国源码学习(七)——DrawerLayout使用2015-08-12阅读683
  • 开源中国源码学习(四)——主界面总体认识2015-08-10阅读674
  • 开源中国源码学习(二)——Splash界面2015-08-05阅读1279
猜你在找
数据结构(C版)
Java之路
MySQL入门到精通(偏性能调优方向)【小强测试出品】
零基础学Java系列从入门到精通
软件测试基础
夜间模式切换setTheme
开源中国源码学习UI篇三之ViewPager+Fragment的使用分析
开源中国源码学习数据篇一之android-async-http框架和AsyncTask
开源中国安卓客户端源码学习一 渐变启动界面
开源中国源码学习UI篇一之FragmentTabHost的使用分析
id="iframeu1607657_0" src="http://pos.baidu.com/kcxm?sz=728x90&rdid=1607657&dc=2&di=u1607657&dri=0&dis=0&dai=2&ps=4106.370363829395x374&coa=at%3D3%26rsi0%3D728%26rsi1%3D90%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1469103898466&ti=%E5%BC%80%E6%BA%90%E4%B8%AD%E5%9B%BD%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%BA%94%EF%BC%89%E2%80%94%E2%80%94%E5%88%87%E6%8D%A2%E7%9A%AE%E8%82%A4%EF%BC%88%E6%97%A5%E9%97%B4%E6%A8%A1%E5%BC%8F%E5%92%8C%E5%A4%9C%E9%97%B4%E6%A8%A1%E5%BC%8F%EF%BC%89%20-%20ZhangGeng%27s%20Blog%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSD&ari=2&dbv=2&drs=3&pcs=1406x714&pss=1407x4932&cfv=0&cpl=20&chi=3&cce=true&cec=UTF-8&tlm=1469103898&rw=715<u=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fdetails%2F47392949<r=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fcategory%2F5709555&ecd=1&psr=1920x1080&par=1920x1032&pis=-1x-1&ccd=24&cja=false&cmi=26&col=zh-CN&cdo=-1&tcn=1469103898&qn=16e1b924f17c035e&tt=1469103898438.34.127.132" width="728" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
查看评论
1楼  Wangpan20162016-06-22 11:47发表 [回复]
有Demo给发一个,部分代码有些看不懂了
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
全部主题  Hadoop  AWS  移动游戏  Java  Android  iOS  Swift  智能硬件  Docker  OpenStack  VPN  Spark  ERP  IE10  Eclipse  CRM  JavaScript  数据库  Ubuntu  NFC  WAP  jQuery  BI  HTML5  Spring  Apache  .NET  API  HTML  SDK  IIS  Fedora  XML  LBS  Unity  Splashtop  UML  components  Windows Mobile  Rails  QEMU  KDE  Cassandra  CloudStack  FTC  coremail  OPhone  CouchBase  云计算  iOS6  Rackspace  Web App  SpringSide  Maemo  Compuware  大数据  aptech  Perl  Tornado  Ruby  Hibernate  ThinkPHP  HBase  Pure  Solr  Angular  Cloud Foundry  Redis  Scala  Django  Bootstrap
  • 个人资料
  •  
    张庚
     
    • 访问:317687次
    • 积分:4827
    • 等级: 
    • 排名:第3893名
    • 原创:193篇
    • 转载:34篇
    • 译文:14篇
    • 评论:61条
  • 关于
  • GitHub地址: https://github.com/SOFTPOWER1991
  • 个人博客:
  • www.zhanggeng.me
  • 文章分类
  • C(9)
  • 结构与算法(1)
  • 学习计划(2)
  • Java(51)
  • JavaWeb(1)
  • Java多线程(11)
  • Android(95)
  • 设计模式(2)
  • 正则表达式(2)
  • Linux(22)
  • Python(18)
  • 版本控制(18)
  • UML(1)
  • 项目点滴(26)
  • android-studio(7)
  • 软件工程(1)
  • Android性能优化(8)
  • JNI/NDK(1)
  • Vim(1)
  • 读源码&学技术(8)
  • 测试(11)
  • 文章存档
    • 2016年05月(11)
    • 2016年03月(3)
    • 2016年02月(3)
    • 2016年01月(6)
    • 2015年12月(3)
      展开
  • 阅读排行
  • Android Studio 主题、字体大小的设置(25422)
  • LeakCanary——直白的展现Android中的内存泄露(22967)
  • Android客户端与服务器交互中的token(16444)
  • android:exported 属性详解(16058)
  • 如何拿到Spinner的当前值,并实时传递至TextView中显示(11731)
  • Android Studio 中如何更改SDK路径(9347)
  • 开源中国源码学习(六)——ButterKnife的使用(8587)
  • 去掉ExpandableListView前的向下箭头(8553)
  • 基本数据类型包装类(7518)
  • 如何查看Android设备的CPU架构信息(5925)
  • 推荐文章
    • *Android RocooFix 热修复框架
    • * android6.0源码分析之Camera API2.0下的初始化流程分析
    • *Android_GestureDetector手势滑动使用
    • *Android MaterialList源码解析
    • *Android开源框架Universal-Image-Loader基本介绍及使用
    • *Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
  • 最新评论
  • Android客户端与服务器交互中的token

    江军祥: 求源码[email protected]

  • Android客户端与服务器交互中的token

    江军祥: 请问你将数据存储在session中 ,session过期时间是怎么处理的

  • Python学习九:列表生成式

    张庚: 呵呵。我在第一篇中,已经写的很明白了,这是我在学习廖雪峰老师的学习笔记。还有,我要不要脸,不重要,你...

  • Python学习九:列表生成式

    张庚: 呵呵。我在第一篇中,已经写的很明白了,这是我在学习廖雪峰老师的学习笔记。还有,我要不要脸,不重要,你...

  • Python学习九:列表生成式

    冯西的技术博客: 这个真的是原创吗?好不要脸。

  • 开源中国源码学习(六)——ButterKnife的使用

    qq_28463783: 谢谢楼主分享~

  • LeakCanary——直白的展现Android中的内存泄露

    21323: Error:(18) Error retrieving parent for item: No re...

  • 开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)

    Wangpan2016: 有Demo给发一个,部分代码有些看不懂了

  • LeakCanary——直白的展现Android中的内存泄露

    CodingForAndroid: 不错!!

  • 向每一个错误致敬——Android HotFix

    aplixy: 亲测可用,谢谢分享,比那个什么HotFix之类的好用多了,给力


width="300" height="250" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_0" name="aswift_0" style="left: 0px; position: absolute; top: 0px;">
【公告】博客系统优化升级      【收藏】Html5 精品资源汇集      前端开发人员必须了解的七大技能图谱    
id="cpro_u2392861_iframe" src="http://pos.baidu.com/kcxm?sz=300x250&rdid=2392861&dc=2&di=u2392861&dri=0&dis=0&dai=1&ps=1073.3703638293944x1395&coa=at%3D3%26rsi0%3D300%26rsi1%3D250%26pat%3D17%26tn%3DbaiduCustNativeAD_xuanfu%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D14%26rss2%3D%2523000000%26titSU%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1469103898466&ti=%E5%BC%80%E6%BA%90%E4%B8%AD%E5%9B%BD%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%BA%94%EF%BC%89%E2%80%94%E2%80%94%E5%88%87%E6%8D%A2%E7%9A%AE%E8%82%A4%EF%BC%88%E6%97%A5%E9%97%B4%E6%A8%A1%E5%BC%8F%E5%92%8C%E5%A4%9C%E9%97%B4%E6%A8%A1%E5%BC%8F%EF%BC%89%20-%20ZhangGeng%27s%20Blog%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSD&ari=2&dbv=2&drs=3&pcs=1406x714&pss=1407x4932&cfv=0&cpl=20&chi=3&cce=true&cec=UTF-8&tlm=1469103898&rw=715<u=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fdetails%2F47392949<r=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fcategory%2F5709555&ecd=1&psr=1920x1080&par=1920x1032&pis=-1x-1&ccd=24&cja=false&cmi=26&col=zh-CN&cdo=-1&tcn=1469103898&qn=963bee2fea02b0c9&tt=1469103898438.32.94.99" width="300" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
关闭
 

开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)

  2085人阅读  评论(1)  收藏  举报
  分类:
 
读源码&学技术(7) 

目录(?)[+]

在开源中国客户端源码的侧滑菜单栏里有一个模式切换的选项,可以完成夜间模式日间模式的相互转换。

一、功能介绍

在侧滑菜单栏里点击日间或者夜间后,客户端的皮肤可以发生变化,来达到保护眼睛的作用。

二、详细介绍

这是在MainActivity的onCreate方法中的一段代码,这段代码完成了读取本地配置中存储的日间模式和夜间模式信息,从而回显到客户端中。

读取本地配置信息,在应用启动时,回显至客户端

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (AppContext.getNightModeSwitch()) {
            setTheme(R.style.AppBaseTheme_Night);
        } else {
            setTheme(R.style.AppBaseTheme_Light);
        }

        ......
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在上面代码中可以看到,各种皮肤的信息还是在Style中进行配置的

日间模式代码

   -- 日间模式 -->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

夜间模式

 -- 夜间模式 -->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

上述只是完成了在应用启动时,读取本地配置信息,回显至客户端。

而真正的点击设置是在侧滑菜单NavigationDrawerFragment中完成的

NavigationDrawerFragment中通过ButterKnife注解找见menu_item_theme

 @InjectView(R.id.menu_item_theme)
    View mMenu_item_theme;
  • 1
  • 2

添加注册监听后

case R.id.menu_item_theme:
        //点击完成模式的切换
     switchTheme();
     break;
  • 1
  • 2
  • 3
  • 4

真正的模式切换代码:

先读取本地配置信息 
如果是夜间,点击后设置为日间模式 
如果是日间,点击后设置位夜间模式 
随后recreate 当前Activity

    private void switchTheme() {
        if (AppContext.getNightModeSwitch()) {
            AppContext.setNightModeSwitch(false);
        } else {
            AppContext.setNightModeSwitch(true);
        }

        if (AppContext.getNightModeSwitch()) {
            getActivity().setTheme(R.style.AppBaseTheme_Night);
        } else {
            getActivity().setTheme(R.style.AppBaseTheme_Light);
        }

        getActivity().recreate();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、总结收获

明白了应用中各种皮肤、模式切换的原理,实质还是——theme

0
 
2
 
 

我的同类文章

读源码&学技术(7)
  • 开源中国源码学习(八)——枚举类2015-09-07阅读525
  • 开源中国源码学习(六)——ButterKnife的使用2015-08-11阅读8592
  • 开源中国源码学习(三)——Log日志上传2015-08-06阅读992
  • 开源中国源码学习(一)——简介2015-08-05阅读1234
  • 开源中国源码学习(七)——DrawerLayout使用2015-08-12阅读683
  • 开源中国源码学习(四)——主界面总体认识2015-08-10阅读674
  • 开源中国源码学习(二)——Splash界面2015-08-05阅读1279
猜你在找
数据结构(C版)
Java之路
MySQL入门到精通(偏性能调优方向)【小强测试出品】
零基础学Java系列从入门到精通
软件测试基础
夜间模式切换setTheme
开源中国源码学习UI篇三之ViewPager+Fragment的使用分析
开源中国源码学习数据篇一之android-async-http框架和AsyncTask
开源中国安卓客户端源码学习一 渐变启动界面
开源中国源码学习UI篇一之FragmentTabHost的使用分析
id="iframeu1607657_0" src="http://pos.baidu.com/kcxm?sz=728x90&rdid=1607657&dc=2&di=u1607657&dri=0&dis=0&dai=2&ps=4106.370363829395x374&coa=at%3D3%26rsi0%3D728%26rsi1%3D90%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1469103898466&ti=%E5%BC%80%E6%BA%90%E4%B8%AD%E5%9B%BD%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%BA%94%EF%BC%89%E2%80%94%E2%80%94%E5%88%87%E6%8D%A2%E7%9A%AE%E8%82%A4%EF%BC%88%E6%97%A5%E9%97%B4%E6%A8%A1%E5%BC%8F%E5%92%8C%E5%A4%9C%E9%97%B4%E6%A8%A1%E5%BC%8F%EF%BC%89%20-%20ZhangGeng%27s%20Blog%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSD&ari=2&dbv=2&drs=3&pcs=1406x714&pss=1407x4932&cfv=0&cpl=20&chi=3&cce=true&cec=UTF-8&tlm=1469103898&rw=715<u=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fdetails%2F47392949<r=http%3A%2F%2Fblog.csdn.net%2Fwatermusicyes%2Farticle%2Fcategory%2F5709555&ecd=1&psr=1920x1080&par=1920x1032&pis=-1x-1&ccd=24&cja=false&cmi=26&col=zh-CN&cdo=-1&tcn=1469103898&qn=16e1b924f17c035e&tt=1469103898438.34.127.132" width="728" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
查看评论
1楼  Wangpan20162016-06-22 11:47发表 [回复]
有Demo给发一个,部分代码有些看不懂了
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
全部主题  Hadoop  AWS  移动游戏  Java  Android  iOS  Swift  智能硬件  Docker  OpenStack  VPN  Spark  ERP  IE10  Eclipse  CRM  JavaScript  数据库  Ubuntu  NFC  WAP  jQuery  BI  HTML5  Spring  Apache  .NET  API  HTML  SDK  IIS  Fedora  XML  LBS  Unity  Splashtop  UML  components  Windows Mobile  Rails  QEMU  KDE  Cassandra  CloudStack  FTC  coremail  OPhone  CouchBase  云计算  iOS6  Rackspace  Web App  SpringSide  Maemo  Compuware  大数据  aptech  Perl  Tornado  Ruby  Hibernate  ThinkPHP  HBase  Pure  Solr  Angular  Cloud Foundry  Redis  Scala  Django  Bootstrap
  • 个人资料
  •  
    张庚
     
    • 访问:317687次
    • 积分:4827
    • 等级: 
    • 排名:第3893名
    • 原创:193篇
    • 转载:34篇
    • 译文:14篇
    • 评论:61条
  • 关于
  • GitHub地址: https://github.com/SOFTPOWER1991
  • 个人博客:
  • www.zhanggeng.me
  • 文章分类
  • C(9)
  • 结构与算法(1)
  • 学习计划(2)
  • Java(51)
  • JavaWeb(1)
  • Java多线程(11)
  • Android(95)
  • 设计模式(2)
  • 正则表达式(2)
  • Linux(22)
  • Python(18)
  • 版本控制(18)
  • UML(1)
  • 项目点滴(26)
  • android-studio(7)
  • 软件工程(1)
  • Android性能优化(8)
  • JNI/NDK(1)
  • Vim(1)
  • 读源码&学技术(8)
  • 测试(11)
  • 文章存档
    • 2016年05月(11)
    • 2016年03月(3)
    • 2016年02月(3)
    • 2016年01月(6)
    • 2015年12月(3)
      展开
  • 阅读排行
  • Android Studio 主题、字体大小的设置(25422)
  • LeakCanary——直白的展现Android中的内存泄露(22967)
  • Android客户端与服务器交互中的token(16444)
  • android:exported 属性详解(16058)
  • 如何拿到Spinner的当前值,并实时传递至TextView中显示(11731)
  • Android Studio 中如何更改SDK路径(9347)
  • 开源中国源码学习(六)——ButterKnife的使用(8587)
  • 去掉ExpandableListView前的向下箭头(8553)
  • 基本数据类型包装类(7518)
  • 如何查看Android设备的CPU架构信息(5925)
  • 推荐文章
    • *Android RocooFix 热修复框架
    • * android6.0源码分析之Camera API2.0下的初始化流程分析
    • *Android_GestureDetector手势滑动使用
    • *Android MaterialList源码解析
    • *Android开源框架Universal-Image-Loader基本介绍及使用
    • *Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
  • 最新评论
  • Android客户端与服务器交互中的token

    江军祥: 求源码[email protected]

  • Android客户端与服务器交互中的token

    江军祥: 请问你将数据存储在session中 ,session过期时间是怎么处理的

  • Python学习九:列表生成式

    张庚: 呵呵。我在第一篇中,已经写的很明白了,这是我在学习廖雪峰老师的学习笔记。还有,我要不要脸,不重要,你...

  • Python学习九:列表生成式

    张庚: 呵呵。我在第一篇中,已经写的很明白了,这是我在学习廖雪峰老师的学习笔记。还有,我要不要脸,不重要,你...

  • Python学习九:列表生成式

    冯西的技术博客: 这个真的是原创吗?好不要脸。

  • 开源中国源码学习(六)——ButterKnife的使用

    qq_28463783: 谢谢楼主分享~

  • LeakCanary——直白的展现Android中的内存泄露

    21323: Error:(18) Error retrieving parent for item: No re...

  • 开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)

    Wangpan2016: 有Demo给发一个,部分代码有些看不懂了

  • LeakCanary——直白的展现Android中的内存泄露

    CodingForAndroid: 不错!!

  • 向每一个错误致敬——Android HotFix

    aplixy: 亲测可用,谢谢分享,比那个什么HotFix之类的好用多了,给力


你可能感兴趣的:(切换夜间模式)