前言

Android的夜间模式主要主用于阅读方面,在QQ,微信读书,新闻阅读类一般会有相应的功能,本文主要介绍整体APP的夜间模式以及webview中夜间模式的实现。

效果图展示

功能实现简介

APP的夜间模式有两种方式:

1、通过切换theme来实现夜间模式。2、通过修改uiMode来切换夜间模式。

修改uimode是修改Configuration,这种主题切换只限于黑白模式,没有其他模式,不需要大量定义主题,即本文介绍的内容。

webview这个是通过改变HTML代码来实现的,我们一个一个的来讲。

application夜间模式代码详解

首先记载依赖:compile 'com.android.support:appcompat-v7:24.0.0',然后Activity须继承AppCompatActivity。这两个应该是硬性要求哦,我在网上查到的。

关于xml的一些准备工作

采用这种方法切换夜间模式,其实就是动态变换xml的背景色。

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/toolBar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="@color/colorPrimary"

android:fitsSystemWindows="true"

app:navigationIcon="@drawable/ic_actionbar_menu"

app:titleTextColor="@color/textColorPrimary"

app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

这是toolbar的布局文件,主要看颜色的处理,这里边颜色一定要引用color资源文件下的颜色。注意哦,一定不可以直接写颜色代码,一定不行!!!我在初学android的时候,基本不管这些封装的,刚开始就是觉得费劲,直接把颜色代码写上不就好了,#FFF或者其他颜色代码,简单明了。这次我才发现看来封装是真的有用。看一下color文件吧。

#0099FF

#4b4b58

#FF4081

#E0E0E0

#FFFFFF

#FFFFFF

#F3F3F3

#00A2ED

#4b4b58

#FFFFFF

#FFFFFF

注意toolbar用到的colorPrimary以及textColorPrimary,都有在color文件中定义。然后需要注意的是你还需要另外定义一份夜间使用的资源颜色 values—night,放在res文件夹下面如图

#35464e

#212a2f

#212a2f

#616161

#424242

#212121

#616161

#616161

注意:values—night下面也有colorPrimary以及textColorPrimary。但是颜色值不一样,当点击切换夜间模式的时候,android会自动从values—night下面取值

还有一点需要注意:APP的主题一定要是DayNight下的

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

@color/colorPrimary

Java代码实现

public boolean onMenuItemClick(MenuItem item) {

switch (item.getItemId()) {

case R.id.action_switch_model:

int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;

if (mode == Configuration.UI_MODE_NIGHT_YES) {

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

} else {

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

}

recreate();

}

return false;

}

这里我是在菜单栏中实现切换的,菜单栏不必详说。主要是看点击事件里的代码详解:

AppCompatDelegate.setDefaultNightMode(int mode);用于适配全局主题

model它有四个可选值,分别是:

MODE_NIGHT_NO: 使用亮色(light)主题,不使用夜间模式

MODE_NIGHT_YES:使用暗色(dark)主题,使用夜间模式

MODE_NIGHT_AUTO:根据当前时间自动切换 亮色(light)/暗色(dark)主题

MODE_NIGHT_FOLLOW_SYSTEM(默认选项):设置为跟随系统,通常为 MODE_NIGHT_NO

这里我们主要采用YES和NO两种主题, int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;用于获取现在的主题。

webview中的夜间模式

我这个方法不通用,但是理念是一样的,都需要注入css代码,改变HTML中的样式,因为HTML的整体样式都归于css管理。这次webview从json数据中获取了整体HTML的代码,通过setdata方法加载,详细用法看链接http://www.jianshu.com/p/7d93d72390ec

这次我在css代码后面加上了字符串"

",代码如下:

public static String createHtmlData(String html, List cssList, List jsList) {

final String css = HtmlUtil.createCssTag(cssList)+ "

";

final String js = HtmlUtil.createJsTag(jsList);

Log.i("CSS123",css);

Log.i("CSS125",html);

Log.i("CSS124",js);

return css.concat(HIDE_HEADER_STYLE).concat(html).concat(js);

}

最后附上demo地址,欢迎下载

http://download.csdn.net/download/qq_32331397/10128552

作者 | 小学生 ,授权发布

http://mp.weixin.qq.com/s/SgMBsXv9pnor8z3GoRN0IQ

android menu夜间模式,Android常用技巧夜间模式开发浅析相关推荐

  1. android menu 小红点,Android自定义ActionProvider ToolBar实现Menu小红点

    今天的几个目标: 1. 自定义ActionProvider 2. Toolbar ActionBar自定义Menu 3. Toolbar ActionBar 右侧Menu添加角标(Toolbar Ac ...

  2. android menu item 显示,Android 如何通过menu id来得到menu item 控件 .

    Android 如何通过menu id来得到menu item 控件 . (2012-07-21 06:43:31) 标签: android 如何 杂谈 Android 如何通过menu id来得到m ...

  3. Android Menu item位置,Android MenuItem自定义布局

    当我点击操作栏中的操作按钮时,我会显示一个 PopupMenu. 我想在我的PopupMenu中的MenuItem,使用这样的自定义布局: 布局/ menu_item_layout.xml andro ...

  4. android menu xml 属性,Android中Menu类型及常见属性说明

    Android系统里面有3种类型的菜单:options menu,context menu,sub menu. 一.options menu 按Menu键就会显示,用于当前的Activity. 它包括 ...

  5. android menu菜单样式,Android Menu 的样式定制

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 其实做原生 Android 开发这么久,对 Android 的原生控件还是比较满意的,毕竟 Material Desig ...

  6. Android Menu菜单栏

    Android Menu菜单栏 效果图 Android Menu菜单栏 菜单: 菜单是许多类型的应用程序中的通用用户界面组件.要提供熟悉且一致的用户体验,您应该使用MenuAPI在活动中呈现用户操作和 ...

  7. android menu夜间模式,手机wps怎么使用夜间模式~

    手机wps怎么使用夜间模式-以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 手机wps怎么使用夜间模式- 点击W图标,然 ...

  8. android自动夜间模式,Android实现日夜间模式的深入理解

    在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...

  9. android 8.1 夜间模式,android 快速实现夜间模式

    最近项目中遇到了一个问题,夜间模式在8.0以上的手机中不起作用,查看了一下原因,是夜间模式实现方法的问题.分两种情况介绍一下 先看一下运行效果: 第一种 是目前项目中用到的,是以前的开发人员写的,存在 ...

最新文章

  1. [C# 网络编程系列]专题六:UDP编程
  2. SSM项目整合RabbitMQ
  3. android 获取应用内存大小,如何在Android中获取当前内存使用量?
  4. HDU-3038-How Many Answers Are Wrong
  5. [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  6. Python xlrd、xlwt、xlutils修改Excel文件
  7. SQL Server 2005合并列成字符串 2008-11-07
  8. linux svn 服务器下载,Linux下搭建SVN服务器完全手册
  9. Java——字符编码详细解释
  10. MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual..........
  11. 一个程序员的郁闷吐槽
  12. 如何快速出机械工程图
  13. Blender学习-考拉课程学习记录
  14. OTA三种差分算法安装使用。bsdiff,hdiffpatch,xdelta3
  15. 试述HDFS中的名称节点和数据节点的具体功能
  16. Linux安装zabbix4
  17. python爬虫获取携程旅游景点评分和评论
  18. wine 安装(ubuntu中安装windows下软件)
  19. 计算机键盘灯不亮原因,键盘上的三个灯不亮?竟是这个原因
  20. 一次诡异的线上数据库的死锁问题排查过程

热门文章

  1. zed相机使用(1)
  2. 2022年华数杯数学建模B题水下机器人的组装计划解题全过程文档及程序
  3. 王者荣耀闪退服务器维护,为什么王者荣耀闪退
  4. Clover 升级到最新版二三事
  5. golang go-sql-driver gorm 数据库报错 bad connection
  6. 解决centos7中文乱码
  7. c语言三元组作用,数据结构 C语言 三元组的具体实现
  8. 【android免root脚本制作】总览Auto.js开发小结——基础篇
  9. CSS基础:基础选择器、字体和文本样式
  10. C++加法运算符重载